By MasterChen

一个人默默的耕耘。by MasterChen

android列表中使用MediaPlayer播放视频的一个问题

现在越来越多的新闻app都开始有直接在新闻列表中播放视频的功能,这极大的方便了用户进行视频新闻的查看,不需要点击进入视频播放页,还可快速的切换到列表中其它视频的播放。

前段时间,刚开发了款app,也有跟新闻app类似的列表视频播放功能,效果图如下:


这里播放的是网络的hls视频,所以直接使用了系统的MediaPlayer进行播放。由于列表中会存在多个视频,所以列表item中针对视频播放都会有个SurfaceView,为了避免不必要的渲染和界面切换时的黑屏,这里默认都不显示SurfaceView,只有在点击播放的时候才会显示SurfaceView。

原先考虑的比较简单,点击了播放后,开始调用MediaPlayer设置视频源和SurfaceHolder便开始了播放了。但出来的现象总是会有个问题,第一次播放时,总是播放失败,不出视频画面,如下图:


但第二次点击播放的时候,却能播放成功。

查看logcat提示信息,发现第一次播放进行SurfaceHolder和视频源设置的时候报错了,提示The surface has been released。debug后发现MediaPlayer设置Holder的时候,Holder的值也不为空,但为什么会提示surface被released了呢?

想到在列表中对SurfaceView的显示控制,可能跟这里的控制有点关系,尝试在SurfaceView的几个生命周期回掉中加入log输出,观察几个生命周期和MediaPlayer设置时的顺序。结果是surfaceCreated是在MediaPlayer设置之后(设置放在播放按钮的click中),所以原因应该就是SurfaceView的初始化没有那么及时,才会出现第一次播放不了,第二次能播放的原因了。

所以这里的解决办法为,将MediaPlayer的设置和播放,放在surfaceCreated中,保证每次播放总是在SurfaceView初始化之后进行。



转载请声明原文地址:http://blog.csdn.net/sagittarius1988/article/details/52081431

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sagittarius1988/article/details/52081431
个人分类: Android
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭