今天跟大家伙儿唠唠我搞的这个“手机牛牛播放器”,纯粹是自己瞎折腾,水平有限,大家凑合看哈。
起因是这样的,我平时喜欢下点小电影啥的,结果手机自带的播放器格式支持太少,动不动就提示“无法播放”,烦都烦死了。网上搜了一圈,各种播放器广告满天飞,不是要你充会员,就是要你下乱七八糟的APP,简直没法用。
寻思着,不如自己搞一个得了。反正闲着也是闲着,就当练手了。说干就干,第一步肯定是找轮子,看看有没有现成的代码可以抄…咳咳,学习一下。
第一步:调研和选型
-
播放器内核:一开始想自己写解码器,后来发现那是找死,直接放弃。搜了一圈,发现VLC的内核比较靠谱,开源免费,支持格式多。就它了!
-
开发语言:本来想用Java,毕竟熟悉。但是考虑到性能,以及VLC有C/C++的接口,最终还是决定硬着头皮上C++。
-
开发环境:Android Studio + NDK,这套环境之前没用过,现学现卖,磕磕绊绊的。
第二步:搭建框架
先用Android Studio搭了个空壳APP,只有一个播放界面。然后开始折腾NDK,把VLC的*库编译出来,导入到工程里。这一步花了我不少时间,各种编译错误,简直要崩溃。还是靠Google大法,一点一点解决。
第三步:对接VLC
这一步是重头戏,要用C++代码调用VLC的接口,实现视频播放。这部分代码比较复杂,涉及到:
-
创建VLC实例
-
设置播放窗口
-
加载视频文件
-
控制播放、暂停、停止
我参考了VLC的官方文档,以及网上的一些例子,一点一点的把代码写出来。中间遇到各种问题,比如画面显示不出来、播放卡顿、程序崩溃等等。只能一遍一遍的调试,打印日志,查找原因。
第四步:界面优化
基本的播放功能实现后,就开始优化界面。加了播放控制按钮,进度条,音量调节等等。这些都是Android的基础控件,比较简单。还加了个文件选择功能,可以浏览手机里的视频文件。
第五步:格式支持
VLC本身支持的格式就很多,基本上常见的MP4、AVI、MKV都没问题。我还加了一些特殊格式的支持,比如RMVB、FLV等等。这部分主要是靠VLC的解码能力,我只需要简单配置一下就行了。
第六步:性能优化
播放器写出来之后,发现在一些老旧手机上播放比较卡顿。就开始进行性能优化,主要做了以下几点:
-
降低视频分辨率
-
开启硬件加速
-
优化内存管理
经过优化后,播放流畅度明显提升。
第七步:打包发布
一步就是打包成APK文件,发布到手机上。我没打算发布到应用市场,就自己用着玩。
总结
整个过程大概花了我一个月的时间,虽然最终做出来的播放器功能比较简单,界面也很简陋,但是也学到了不少东西。比如:
-
Android NDK开发
-
VLC的使用
-
视频播放原理
最重要的是,享受了自己动手解决问题的乐趣。以后有机会,还会继续折腾一些更有意思的东西。
就说这么多,各位看官,下次再见!