10

Androidでビデオを再生しようとしていTextureViewます。ビデオに関しては、すべてがうまく機能します。しかしMediaPlayer.prepare();、少し時間がかかります。そのため、その時のプレースホルダーをいくつか示したいと思います。私はこのようにグライドでそれをやろうとしています:

public static final Rect rc = new Rect();
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int w, int h) {
    Surface s = new Surface(surfaceTexture);
    Glide.with(mTextureView.getContext())
            .load(thumbUrl)
            .asBitmap()
            .dontAnimate()
            .centerCrop()
            .into(new SimpleTarget<Bitmap>(w, h) {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
                    rc.set(0,0,w,h);
                    Canvas c = mTextureView.lockCanvas(rc);
                    if (c == null)
                        return;
                    c.drawBitmap(resource, 0, 0, null);
                    mTextureView.unlockCanvasAndPost(c);
                }
            });

    try {
        mMediaPlayer.setDataSource(url);
        mMediaPlayer.setSurface(s);
        mMediaPlayer.prepareAsync();
        mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mMediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
                mMediaPlayer.setVolume(0,0);
                mMediaPlayer.start();
            }
        });
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

しかし、それは画像を表示しません。私は手動SurfaceViewで呼び出す必要がありますonDraw。そして、これにはSurfaceHolderが使用されています。しかし、方法TextureViewがありませんgetSurfaceHolder()

これを行う正しい方法は何ですか?

UPD:私が理解したのは、設定しないと画像が表示されるということです。これは、ビデオをバッファリングしている間、表面を黒く保つMediaPlayerことを意味します。MediaPlayerどうにかしてこの動作をオーバーライドすることは可能ですか?

4

0 に答える 0