视频录制与压缩之硬编码和软编码

硬编码:
用设备GPU去实现编解码,这样可以减轻CPU的压力。
软编码:
让CPU来进行编解码,在c层代码来进行编解码,因为c/c++有很多好的编解码库。

软硬编码对比:
硬编的好处主要在于速度快,而且系统自带不需要引入外部的库,但是特性支持有限,而且硬编的压缩率一般偏低,而对于软编码来说,虽然速度较慢,但是压缩率比较高,而且支持的H264特性也会比硬编码多很多,相对来说比较可控。硬编码会受硬件设备支持的影响。

在Android 4.1之前没有提供硬编解码的API,所以基本都是采用开源的那些库,比如著名的FFMpeg实现软编解码。但是通常情况下,同一平台同一硬件环境,硬编码的速度快于软件编码,软编码使用CPU来进行计算,会消耗一些app的运算效率。在Android4.1出来了一个新的API:MediaCodec可以支持硬编解码,MediaCodec可以支持对音频和视频的编解码.

MediaCodec从api16开始提供,它能够访问更底层的多媒体编解码器组件。MediaCodec是更底层的apis,是Android底层多媒体支持基础架构的一部分(通常与MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface, 以及AudioTrack一起使用)。
这里介绍下FFMpeg实现软编解码

small-video-record

视频录制与压缩之硬编码和软编码_第1张图片

视频压缩这个框架不错,我测试了一个手机上,录制相同时间的视频,不做压缩的有一百多兆,我压缩到了十几兆,视频清晰度还不错。 看的朋友随手点歌赞哦

Android端音频视频采集,底层利用FFmpeg编码压缩处理

  • 边采集边编码。
  • 利用FFmpeg自定义录制各种时长、分辨率、码率、帧率、转码速度的视频。
  • small-video-record2已解耦FFmpeg,可根据自己需求定制FFmpeg。
  • 暴露FFmpeg命令操作接口,可自定义更多功能。
  • small-video-record2 支持全平台,如果你手机 cpu 是64位的将达到秒编!
  • 可选择本地视频进行个性化压缩,如果你手机 cpu 是64位的速度将相对很快。
  • 录制简单,几行代码完成集成,几个参数搞定录制。

利用FFmpeg API ,YUV编码为H264、PCM编码为AAC

h264视频和acc音频合成MP4,视频编码解码加密。

封装格式转换,就是在AVI,FLV,MKV,MP4这些格式之间转换(对应.avi,.flv,.mkv,.mp4文件)。需要注意的是,基于FFMPEG的封装格式转换器并不进行视音频的编码和解码工作。而是直接将视音频压缩码流从一种封装格式文件中获取出来然后打包成另外一种封装格式的文件。传统的转码程序工作原理:
输入文件解封转后得到音视频流,再分别解码得到像素数据YUV(颜色编码)和采样数据PCM,再编码为流后封装,得到输出文件

举了一个举例:FLV(视频:H.264,音频:AAC)转码为AVI(视频:MPEG2,音频MP3)的例子。可见视频转码的过程通俗地讲相当于把视频和音频重新“录”了一遍。

不进行转码,只进行封装格式转换的程序可参考:

基于FFMPEG的封装格式转换器(无编解码)

不进行视频和音频的编解码工作,因此本程序和普通的转码软件相比,有以下两个特点:
处理速度极快。视音频编解码算法十分复杂,占据了转码的绝大部分时间。因为不需要进行视音频的编码和解码,所以节约了大量的时间。视音频质量无损。因为不需要进行视音频的编码和解码,所以不会有视音频的压缩损伤

其他相关推荐
FFmpegAndroid

Android视频编解码之MediaCodec简单入门

你可能感兴趣的:(Android,音视频)