转载注明出处:
文章出自 我不只是看客/NotLooker
衔接上一篇博客,实现了播放瀑布流之后。点击跳转详情页时,如果同一个视频实现无缝播放,就是不需要再次网络缓冲。今日头条demo:
点击了item跳转到详情页后,视频并没有重新reload,而是直接开始播放;
看到效果,开始整理思路:
首先,视频播放 本质就是 视频内容流+显示窗口 的结合;从list跳转到detail的时候 并没有重新reload 说明内容流并没有发生变化,只是显示窗口改变了,结合第一篇的TextureView+MediaPlayer 的知识,应该是MediaPlayer并没有更换。思路有了 直接开写。
listvideo部分使用上一篇的demo,只需要在adapter中 增加按钮的单击响应事件:
holder.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyApplication.getInstance().getMediaPlayer().pause();
Intent intent = new Intent(context, Main2Activity.class);
intent.putExtra("path", data.get(position));
context.startActivity(intent);
}
});
因为跳转到新的页面,在新的页面中构建一个新的Textureview, 因为窗口发生变换,所以mediaplayer的链接窗口需要修改,需要调用
mMediaPlayer.setSurface(new Surface(this.getSurfaceTexture()));
就可以了。
因为这只是提供思路的demo 所以 在demo中吧MediaPlayer写成单例,放在application中,方便在跳转的时候使用。
新的Activity放出onCreat()
textureView = (MyTextureView) findViewById(R.id.textureview2);
textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
textureView.setmMediaPlayer(MyApplication.getInstance().getMediaPlayer());
textureView.startPlay();
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {}
});
注解: 因为这里是demo 所以跳转到新的页面 直接无缝播放,不考虑地址变更等情况。
完成demo: