前言
其实一直想写一个自己的播放器玩玩,我就是对很多事物充满好奇!
过程记录
2014.7 正式将写一个播放器提上议程。
2014.8 入职了公司,暂时计划搁置。
2015.5 计划重新启动。
2015.5.22 发现了一个比较优秀的参考资料。(见思路整理,第五点)
~至今 业余时间一直在查资料
收获
- android 平台本身的音视频平台性能较弱。有实际的需求推动。
- ffmpeg是很成熟的音视频编解码库。
- sdl2原生支持了android平台,是一个强大的跨平台多媒体开发库,它将不同平台的音视频等硬件进行了隔离,抽象出了基本统一的接口。
- android平台支持JNI开发。
思路概述
先不考虑网络视频源。
- 使用ffmpeg可以拿到视频文件的视频数据和音频数据。
- 使用sdl2可以在android平台播放视频和音频。
- 我们需要把ffmpeg提供的合适的音频和视频交给sdl2进行展示和播放。
.合适的视频数据意味着需要转换(改变分辨率大小,格式等)
.合适的音频数据意味着需要重新采样等。 - 播放器基本控制功能的实现
.播放
.暂停
.跳转 - ffplay是官方提供的一个多媒体播放器样例,基本上涵盖了一个简单播放器需要的全部功能,如果
可以吃透,稍加整理,是可以作为对ffmpeg和sdl的wrapper库供android jni 调用的。
发现一个优秀的参考资源不敢私藏:http://blog.csdn.net/dawdo222/article/details/8692834
参考文档
经过一番查找,发现下面几个地址,值得浏览
http://dranger.com/ffmpeg/
这应该是目前网络上大多数教程的参考源。(由于时间关系,提供的代码不一定都能很好的工作)
https://github.com/chelyaev/ffmpeg-tutorial/blob/master/tutorial04.c
这个仓库的作者,针对上面的教程对提供的源码进行了修正和更新。可以参考。
http://dande618.github.io/blog/2013/10/29/FFMepg/
这个博客的代码对音频进行了较好的处理(虽然不大懂,但确实可以工作)
http://www.cnblogs.com/tanlon/p/3966130.html
这个博客的作者对很多音视频相关的内容进行了多个平台的实践,值得参考
注意事项
网络上代码很多,有些很相似但效果却不一样。这时最好自己手打一遍代码,理理思路。同时借用文档比较工具也是可以的。