Android开发

Android音视频系列(一)硬件解码与软件解码

2021-02-23  本文已影响0人  zzqwl

对视频数据编解码一般有两种方式:硬件解码和软件解码,也就是我们常说的硬解和软解。下面看一下两者的区别。

一、软解

即通过软件让CPU来对视频进行解码处理,就是通过CPU来运行视频编解码代码,我们最最常见的视频软解码开源看就是FFmpeg。

FFmpeg官网:https://ffmpeg.org/

国内FFmpeg教程:雷霄骅(leixiaohua1020)的专栏

目前基于FFmpeg的开源播放器有B站的ijkplayer,教程请移步:http://blog.csdn.net/u010072711/article/details/51728537

B站开源播放器ijkplayer

优点:具有更好的适应性,软件解码主要是会占用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的占用,更加费电。

软硬结合才是王道,根据实际情况合理选择。

参考

Android视频播放软解与硬解的区别

上一篇下一篇

猜你喜欢

热点阅读