android列表中使用MediaPlayer播放视频的一个问题
2016-07-31 22:50
1741 查看
现在越来越多的新闻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
前段时间,刚开发了款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
相关文章推荐
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.2 使用GLSurfaceView和MediaPlayer播放一个平面视频(中)
- android播放音视频使用mediaplayer不规范导致的电流过高问题
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.3 使用GLSurfaceView和MediaPlayer播放一个平面视频(下)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.1 使用GLSurfaceView和MediaPlayer播放一个平面视频(上)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.1 使用GLSurfaceView和MediaPlayer播放一个平面视频(上)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.3 使用GLSurfaceView和MediaPlayer播放一个平面视频(下)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.2 使用GLSurfaceView和MediaPlayer播放一个平面视频(中)
- Android之使用MediaPlayer和SurfaceView组件播放一个简单的视频
- Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 使用Volley来写一个List列表(Valley可以解决很大一部分android请求server的问题)
- Android:使用MediaPlayer和SurfaceView播放视频
- Android之使用VideoView组件播放一个简单的视频
- 一个视频播放列表demo,视频播放使用的ijkplayer,正在播放视频拖动到不可见区域小窗口播放,可全屏切换
- Android之通过VideoView控件播放一个视频出现的问题以及我的解决办法
- android-MediaPlayer的基本使用-播放音频视频
- Android 使用MediaPlayer 播放 视频
- Android -- 视频音频多媒体播放,在线播放, MediaPlayer, SurfaceView, SoundPool, Timer定时器使用
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- android中使用MediaPlayer和SurfaceView播放视频
- Android中使用自定义的VideoController和MediaPlayer实现视频的窗口和全屏播放