在PC机上,Camera采集数据利用ffmpeg进行编码往往没有任何问题,但是到了android平台或多或少会出现一系列问题,下面就针对这些问题总结一下。
1、在PC和android平台最大的差别就是架构不一样,这就是导致出现一系列问题的“罪魁祸首”的原因:
android端采用的精简指令导致编码运算时间远远长于PC机。
2、不管是本地编码存储还是编码之后发送到后台直播,这些都是要考虑的,比如利用ffmpeg进行X264编码,一般人的做法就是Android平台Camera采集数据,通过预览
获取摄像头原始数据,然后利用ffmpeg进行编码(编码器是X264),编码成h264格式数据,然后进行本地存储或是发送给服务器。但是这样做有一个很严重问题存在:
采集的数据进行编码的帧率达不到要求,而且不同手机的效果差别非常大(好一点的手机可能没有那么明显,差一点的手机非常明显)。这是什么原因造成的呢?
究其原因是:ffmpeg仅仅是软编码,仅仅利用cpu,没有用到硬编码处理,这样就导致系统压力非常大,如果预览数据用于其他用途的时候,这种现象更加明显。
所以这样情况下,我们应该利用硬编码来处理,ffmpeg更加适合解码,很多直播APP就是利用ffmpeg来做的,直播软件后台都是PC端来处理,然后发送压缩流,到手机端通过ffmpeg进行解码器对压缩流进行解码,然后显示出来。
下一章 来具体看代码中的ffmpeg编码和系统的硬编码两种不同的方式。