对视频数据编解码一般有两种方式:硬件解码和软件解码,也就是我们常说的硬解和软解。下面看一下两者的区别。
一、软解
即通过软件让CPU来对视频进行解码处理,就是通过CPU来运行视频编解码代码,我们最最常见的视频软解码开源看就是FFmpeg。
FFmpeg官网:https://ffmpeg.org/
国内FFmpeg教程:雷霄骅(leixiaohua1020)的专栏
目前基于FFmpeg的开源播放器有B站的ijkplayer,教程请移步:http://blog.csdn.net/u010072711/article/details/51728537
优点:具有更好的适应性,软件解码主要是会占用CPU的运行,软解不考虑社备的硬件解码支持情况,有CPU就可以使用了。
缺点:主要靠算法解码,很耗费性能、耗电。
二、硬解
通过调用GPU的专门模块编码来解,减少CPU运算,对CPU等硬件要求也相对低点。将原来全部交由CPU来处理的视频数据的一部分交由GPU来做,而GPU的并行运算能力要远远高于CPU,这样可以大大的降低对CPU的负载,CPU的占用率较低了之后就可以同时运行一些其他的程序了。
视频播放——VideoView
VideoView基于MediaPlayer(也是硬件解码)实现,但 MediaPlayer 封装的比较死,对于视频 编解码协议支持的较少。
视频录制——MediaRecorder,MediaCodec
MediaRecorder:可以实现直接录制视频 使用方便,得到就是编码和封装好的音视频文件,可以直接使用。但无法获取原始数据,不能对每一帧数据进行处理,无法支持我们程序中自己需要的一些逻辑。
MediaCodec:则具备很高的拓展性,支持的协议较多,我们可以根据流媒体的协议和设备硬件本身来自定义硬件解码。代表播放器:Google的ExoPlayer。
优点:更加省电,适合长时间的移动端视频播放器和直播,手机电池有限的情况下,使用硬件解码会更加好。减少CPU的占用,可以把CUP让给别的线程使用,有利于手机的流畅度。
缺点:缺乏有力的支持(包括滤镜、字幕)、局限性较大(需要硬件有硬件解码模块、相关的驱动配合)、设置较为复杂;
三、总结
在Android设备硬件支持的情况下优先使用Android设备的硬件解码,减少CPU的占用,更加省电。在Android设备硬解不支持的情况下选择使用软解码,不管怎么样,视频至少能够播放,具有更好的适应性,但是增加了CPU的占用,更加费电。
软硬结合才是王道,根据实际情况合理选择。
网友评论