最近开始接触视频,学习了很多,也基于很多原因 开始了解播放器。
当然 最近 接触最多应该是M3u8格式的视频,官方称之为HLS,草率的看了下 Android 原生mediaplayer,vitamio,和ijk.当然还有exoplayer.说实话,我其实没有太能够分辨出这几个播放器的优缺点,但是过了几遍Java 层的代码,其实受益良多。
我有一种想写一个播放器系列的冲动,无妨,搬砖久了,就没有冲动了。
先说说mediaplayer吧,我最开始用的是饺子,毕竟大佬写的,Ui 和要求很接近,重要的是很小,至于为啥没有用GSYvideoplayer,时间有点长,忘记了,需求从 最开始的 m3u8播放到,图片前置广告,再到视频前置广告,然后是视频广告 不可快进等相关UI 控制修改,最后是视频拖动限制,等等。
先说图片广告吧,思路就是 用封面图 作为图片广告,hander post 刷新倒计时UI,图片广告结束后,再播放视频广告或者视频正文。
再说视频广告,因为饺子 提供了修改分辨率的功能,于是可以将视频广告设置到分辨率里面,然后修改一下调整分辨率的弹窗,也没有多少问题。
然后是像腾讯播放器那样,滑屏拖动限制,就是手势分发。
至于为啥要播放器,老板说 不停的左右滑动改变播放进度,视频会出现卡顿,不播放的情况,而且加速命中不高,嗯?懵逼。还有就是 赶工出现的,又改的面目全非了,有些手机会崩溃。于是果断放弃mediaplayer,或许在不忙的状态下 换播放器是正确的吧。
然后就切换到vitamio ,至于说为啥没有用GSY,我们的加速地址,他播放不了。我用IJK,还是播放不了,百度没法解决不了,就换成了vitamio了。
vitamio 其实很好的,基于SurfaceView 实现播放器画布,SurfaceView和TextureView区别还是挺大的,具体的请百度 谷歌,我怕我乱讲,如今播放器要实现无缝全屏,小屏,列表,正常这几个模式,大多数还是用的TextureView,毕竟这个可以截屏(手动滑稽)。如今列表播放 是一个很常见的功能,保证后台mediaplayer 唯一是一个思路,然后老板怕vitamio 会出现 mediaplayer 一样的问题,疯狂切换播放进度,然后花屏了,出现马赛克了(我觉得,我可能想跑路了),至于网上提供的解决花屏的办法都没有解决到,有一点,他们提供的播放器画布是SurfaceView ,我是TextureView,所有我不晓得应该怎么办(或许,我没有更完,我就回成都了,西安搬砖太难了,我还是回去当一个菜鸡比较好);
然后,搬砖嘛,哪里有砖往哪里搬,草草的打了一个Exo的demo,老板疯狂操作之后,没有出现马赛克,各种体验良好,于是我们决定用EXO.毕竟是谷歌粑粑写的东西,应该可以的,同时学习下高手 写代码的手法。同时EXO 也可以播放我们的加速路径,嗯,完美的播放器,如果我能够把界面封装出来就最好了。
github 地址 :
[文档地址:](https://exoplayer.dev/guide.html)
导入就很简单了,
完整版本是这么添加的:
implementation 'com.google.android.exoplayer:exoplayer:2.9.6'
最新的是2.9.6。至于看版本号就是下面的这个地址:https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md
然后需要配置下 对Java 8的支持。
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
不要问为啥,因为他需要这么配置。
如果自己在项目中用到 Java 8
// For Java compilers:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
}
这是 项目中用Kotlin
// For Kotlin compilers:
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
}
然后就是看文档,文档上面有,今天就先这样,后面再更。
网友评论