我用surfaceview和mediaplayer制作了一个视频播放器.我有10个视频和10个按钮.如果点击每个按钮,则每个视频都在播放.
这是我的代码..
//onCreate
holder = surfaceview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//Button1
if(mp == null)mp = new MediaPlayer();
mp.setDataSource(mediaplay_path);
mp.setDisplay(holder);
mp.setScreenOnWhilePlaying(true);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.prepare();
mp.start();
//Button2
if(mp != null){
mp.stop();
mp.reset();
}
mp.setDataSource(mediaplay_path2);
mp.setDisplay(holder);
mp.setScreenOnWhilePlaying(true);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.prepare();
mp.start();
//Button3~Button10 is same as Button2..
Run Code Online (Sandbox Code Playgroud)
一切都好.我的自定义视频查看工作正常.但是当视频转到下一个视频时,前一个视频的最后一个场景会保留一段时间并转到下一个视频场景.
我认为这是因为在下一个视频播放之前,之前的表面视图应该是清晰的.但我不知道如何清除表面视图或表面支架.
我已经搜索了这个,但只能找到如何播放视频,而不是如何清除从媒体播放器中消失的表面视图.
请帮帮我~~!
我有一个MediaPlayer渲染视频TextureView.这很有效.
现在,我希望在TextureView给定时间MediaPlayer内在此上显示静止图像,然后将视频呈现为相同TextureView.
这是我渲染位图的代码:
Canvas canvas = mTextureView.lockCanvas();
canvas.drawBitmap(sourceBitmap, matrix, new Paint());
mTextureView.unlockCanvasAndPost(canvas);
Run Code Online (Sandbox Code Playgroud)
在此之后,任何播放视频的尝试都会导致ERROR_INVALID_OPERATION(-38)从视频播放器触发.
我试着评论出来的电话drawBitmap,但错误仍然发生了.如此看来,中调用简单的动作lockCanvas,然后unlockCanvasAndPost在结果TextureView是不适合MediaPlayer使用.
有什么方法可以将其重置为TextureView允许MediaPlayer使用它的状态吗?
我正在研究Android 4.2.2.
我正在使用Exoplayer和GL SurfaceTexture(来自TextureView)来显示视频.我在视频播放中重复使用相同的表面.
我释放播放器并实例化一个新播放器.第二次显示SurfaceTexture时,它会显示上一个视频中的旧纹理,直到播放器开始播放并用黑色填充Surface.
我正在寻找一种方法来绘制黑色矩形以填充黑色表面,但无法实现这一点.