美文网首页
VideoView使用心得

VideoView使用心得

作者: 壹公升 | 来源:发表于2016-09-20 17:06 被阅读0次

最近需要写一个关于视频播放的功能,功能很简单,就是实现简单的视频播放,暂停,和播放进度的显示,所以就不考虑使用第三方播放器来实现,经过调研决定使用android提供的videoView控件来实现。下面就写下我的使用心得:

进度显示

关于进度显示的要求是在视频右上角显示视频的倒计时时间,我最初想到的就是使用Handler的postDealyed方法去实现,后来在网上查资料发现使用新线程进行进度的更新比使用Handler的postDealyed方法更好,详细内容可以参考
强迫症的研究——MediaPlayer播放进度条的优化

视频播放的恢复

在Google的官方文档中对videoView的介绍有这样一段话:

Note: VideoView does not retain its full state when going into the background. In particular, it does not restore the current play state, play position, selected tracks, or any subtitle tracks added via [addSubtitleSource()](https://developer.android.com/reference/android/widget/VideoView.html#addSubtitleSource(java.io.InputStream, android.media.MediaFormat)). Applications should save and restore these on their own in onSaveInstanceState(Bundle) and onRestoreInstanceState(Bundle).

大概意思就是<code>videoView</code>不会为你自动保存和恢复视频播放的状态,如果需要你要自己在<code>onSaveInstanceState(Bundle)</code>和<code>onRestoreInstanceState(Bundle)</code>中进行视频播放状态的保存和恢复,所以我们要在<code>onPuse</code>方法中对<code>videoView</code>的状态进行保存,暂停视频的播放;在<code>onStop</code>方法中kill播放进度线程,在<code>onStart</code>方法中对<code>videoView</code>进行状态恢复

问题一

但是这样并没有完美的解决这个问题,当你按下home键再回到app时视频有时不会继续上次的播放而是重新从头播放。这个是因为在恢复<code>videoView</code>的时候<code>seekto</code>之后直接调用<code>videoView</code>的<code>start()</code>方法;但是<code>seekto</code>方法是一个异步方法,所以出现上面的原因你就明白了,怎么去解决呢?android提供了<code>MediaPlayer.OnSeekCompleteListener</code>;当<code>seekto</code>完成时会回调这个方法,我们可以在这个方法中调用<code>start ()</code>方法。所以,我们可以在<code>videoView</code>的onPrepared回调方法中拿到Mediaplayer并给它设置<code>OnSeekCompleteListener</code>

问题二

按下home键后再回到app时<code>seekto</code>的位置不准
这个问题经过调研和查阅资料发现android的<code>seekto</code>方法不是根据方法中的参数值来定位的,而是定位到参数值附近的关键帧,至于什么是关键帧大家可以Google,百度一下,对于这个问题目前找到的比较好的解决方法就是对视频增加关键帧,如果有其他好的解决办法欢迎告知

耳机拔出时视频暂停播放

这个肯定是要注册广播接收器了,就监听了下面两个系统广播:
1.监听<code>Intent.ACTION_HEADSET_PLUG</code>系统广播(监听有线耳机)
2.监听<code>BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED</code>系统广播(无线耳机)
但是事情总不是那么的一帆风顺,后来发现这样子有事会有延迟,至于怎么造成的我也没有查太清楚,但是找到新的替代方法:
监听<code>android.intent.action.HEADSET_PLUG</code>系统广播(监听有线,无线耳机的断开)

相关文章

  • VideoView使用心得

    最近需要写一个关于视频播放的功能,功能很简单,就是实现简单的视频播放,暂停,和播放进度的显示,所以就不考虑使用第三...

  • 视频播放-VideoView

    使用VideoView实现全屏播放,自定义MyVideoView extends VideoView。重写Vide...

  • Android 视频播放VideoView

    VideoView是Android用来实现视频播放的主要控件,VideoView内部是使用MediaPlayer来...

  • 播放视频

    主要使用 VideoView 类来实现。和 MediaPlayer 比较类似。 VideoView工作流程 1. ...

  • VideoView使用

  • 不能不会的VideoView视频播放器

    1. VideoView简介 Android实现视频播放主要是使用VideoView类来实现的。 VideoVie...

  • VideoView 播放本地、网络视频

    通过VideoView播放本地、网络视频知识点:1.VideoView基本使用2.访问内部存储3.android ...

  • VideoView使用注意事项

    偶尔一次使用VideoView的时候发现,将VideoView写在xml文件中,播放视频会导致页面释放不了,导致内...

  • Android坑集

    Activity使用VideoView时,AudioManager引用Activity context引起的泄露 ...

  • [Android]简易播放视频

    播放视频 使用kotlin 使用MediaController+VideoView实现方式视频播放和常用控制这种方...

网友评论

      本文标题:VideoView使用心得

      本文链接:https://www.haomeiwen.com/subject/lmdoettx.html