分享

原生VideoView使用总结

 个人文档awpyia 2017-05-10

今日科技快讯

昨天是双12的最后一天,支付宝口碑公布的数据显示,双12活动三天,累计参与的消费者数超1亿。仅12月10日一天,就有4900万人走上街头,用支付宝搞定了自己的吃喝玩乐,“85后”的年轻人占到66%。主打“5折”的餐饮类,是人流量最大的,其次是超市。但是对于其他领域的商家来说,双12的影响却不是那么大。

作者简介

本篇来自 niorgai 的投稿,篇幅不长,介绍了如何使用 VideoView,适合还未接触的朋友阅读。文末提及的 ExoPlayer,感兴趣的朋友可以关注下

niorgai 的博客地址:

http://niorgai.

正文

Android 上原生的控件 VideoView 当然是做视频播放的首选,使用简单,下面介绍一下自己在项目使用过程中的一些注意点.

1. 宽高问题

(1).VideoView 的源码可知,不管你设置的 View 的宽高是多少, VideoView 会根据视频文件的宽高重新设置 View 的宽高,最终显示效果类似于 ImageView FIT_CENTER.

(2). 如果想自定义宽高,做到 FIT_XY 的效果,就需要继承 VideoView 重写 onMeasure 方法.

2. 播放和暂停/恢复

(1). 播放调用 setVideoPath()setVideoURI() 即可, VideoView 会异步加载视频,加载完毕回调 OnPreparedListener() .如果播放本地视频,放进 raw 文件夹,如 video_guide.mp4.


(2). 暂停: pause().

(3). 恢复: start().注意这里不要调用 resume().

3. 进度条

(1). 进度检测

UI中一般会有一个 SeekBar 来显示当前播放进度,这里我采取是定时刷新的的办法:

  • OnPreparedListener() 中设置 SeekBar max 值.

mSeekBar.setMax(mp.getDuration());
  • 通过 Handler 每秒计算 SeekBar 的位置.

mSeekBar.setProgress(mVideoView.getCurrentPosition()).

(2). 进度条拖动,必然是通过 OnSeekBarChangeListener() 监控.

4. 显示和隐藏 Loading 图

如果播放网络视频,难免会遇到缓冲的情况,除了视频需要切片之外,客户端还需要监听缓冲状态以显示/隐藏 Loading 图.

5. “无法加载此视频”的提示

如果是一个无法播放的视频,会弹出一个”无法播放此视频”的 Dialog. 从体验的角度来说就算无法播放也不能用这样的 Dialog 来提示,查看源码可知, 只需要为 VideoView 设置 OnErrorListener() 即可.

6. 横竖屏切换

视频当然是全屏播放最好,此时就需要将 Activity 变为横屏.

(1). AndroidManifest.xml 设置当前 ActivityconfigChanges 属性.

android:configChanges='orientation'

(2). 通过代码改变当前 Activity 的横竖屏.


(3). 在 View 或 Activity 的 onConfigurationChanged() 回调中处理横竖屏切换.

7. 切换后台或打开新页面(即经过 Activity 的 onStop() 生命周期

因为 VideoView 继承了 SurfaceView , 在 Activity 的 onStop() 生命周期中会调用 surfaceDestroyed(), 此时会释放 MediaPlayer, 所以当切换后台或打开新页面回来,视频就会重头播放,暂时还没想到解决办法.

以上就是关于原生 VideoView 的简单使用, 下一步我考虑切换到 Google 的

ExoPlayer

https://github.com/google/ExoPlayer

如果使用顺利我会继续总结.

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多