经常会遇到这样的需求,播放器支持动态切换视频源.典型的应用就是在电视上切换频道了.
市面上的播放器,在切换视频源时,可能需要将当前播放器release,再创建新的来进行加载,这样基本都存在闪一下黑屏的问题,个人感觉不是很好.那如何使得这两个视频平稳过度呢,比如在先一个视频未渲染之前,先停留在前一段视频的最后一帧画面(或许再加上个磨砂效果),会不会更好些?
下面就简单介绍一下实现原理与方法.
原理就是给视频播放界面加一个ImageView遮罩,在平时隐藏,切换的过程显示,并把视频最后一针画面保存到bitmap,然后在遮罩上显示这个bitmap;等后一个视频出来时候,在把遮罩隐藏之~
代码片段如下,不再详说,请参考注释:
- 切换视频源
if (mRenderView != null) {
// 不为null,表示之前有渲染过视频,表示这里是视频切换而不是初始播放.
//这里是切换视频源时的逻辑.切换视频源的时候,需新建一个player实例进行播放
if (mRenderView instanceof TextureView){
// 获取最后一针图像,并且保存成bitmap,以供遮罩显示.
Bitmap bmp = ((TextureView) mRenderView).getBitmap();