版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huanghuangjin/article/details/81779391
封装:从文件中把音视频读出来
解码:将音视频解压出来
重采样:将音视频转换成声卡显卡支持的格式,视频需要做像素格式的转换
MPEG(或叫MPEG-4)是一套用于音频﹑视频信息压缩的编码标准。
MPEG-4 Part 14 MPEG-4文件格式 Part 15 AVC文件格式
压缩算法:H264(AVC Part10)
常用封装格式:AVI(当中可以存放任意压缩标准的音视频文件,甚至不压缩)
FLV ts(电视) 等流媒体格式
ASF(微软支持的点播格式)
mp4
常见编码格式:视频 H264(AVC Part10), wmv(H264与wmv编码有上下帧的关系,有关键帧), XviD(Part2), mjpeg(摄像机,每一帧都是独立的,seek时不用算关键帧,很快,坏处就是压缩比例低) 几乎都是有损压缩
音频 aac MP3(aac与mp3都是有损压缩) ape(无损压缩) flac
解封和解码过程:
NAL:网络提取层,包含信息比如是否为关键帧﹑SPS﹑PPS,视频帧包含 I帧(关键帧) B帧(是相对于前一帧于后一帧的变化) P帧(是相对于前一帧的变化)
VCL:视频编码层
硬解码速度比软解快,但硬解的帧率都是固定的比如60帧,软解码可以控制帧率,在性能好的CPU上甚至能解200帧每秒,但软解的缺陷就是很耗电。
像素格式:
BGRA
RGBA 在内存中一般以B G R的顺序存放,需要注意的是:计算机为了对齐,分配的内存长度一般都是4的倍数
ARGB32
RBG32 一个颜色用10bit表示,能表示的真彩色空间更大
YUV420 所有视频的压缩算法都是在YUV基础上的,一个像素值只需要12bit。Y表示明亮度(灰度),U和V表示色度
R = Y + 1.4075*(V-128);
G = Y - 0.3455*(U-128) - 0.7169*(V-128); GPU的浮点运算速度远远快于CPU的,但压解缩速度一般
B = Y + 1.779*(U-128);
RGB与YUV互转的公式由很多种
YUV420P P表示YUV平面方式存放,即内存中先把所有的Y存下来,再把所有的UV存下来
RGB的平面存放方式就是内存中先存所有R,再存所有G,再存所有B。 音频也存在平面存放方式
PCM音频参数:(无损音频数据)
采样率:sample_rate 44100 (CD,DVD是48000) 表示1秒采集44100次声音,最后化成一个音存下来,大小可以16、24、32bit等
通道:channels (左右声道,模拟的两个人耳,每个通道采样率都是44100)
样本大小(格式):sample_size
- AV_SAMPLE_FMT_S16 (两个字节存放一次音)
- AV_SAMPLE_FMT_FLTP (float存放,32位,aac重采样时,基于浮点运算的)
样本类型:planar
AV_SAMPLE_FMT_S16 在内存中的格式为:c1,c2,c1,c2...
AV_SAMPLE_FMT_S16P 即平面存放方式,在内存中的格式为:c1,c1,c1,...,c2,c2,c2,...
MP4格式分析:(可以去看MPEG-4说明文档)
H.264/AVC视频编码标准:
视频编码层面:VCL
- 存放视频数据的内容
网络抽象层面:NAL
- 格式化数据并提供头信息
NAL单元:
平时的每帧数据就是一个NAL单元(SPS与PPS除外)。在实际的H264数据帧中,往往帧前面带有 00 00 00 01 或 00 00 01 分隔符,
一般来说编码器编出的首帧数据为PPS与SPS,接着为I帧。
GOP:一组数据(可以独立播放的),即表示说这组数据有一个关键帧,其他所有的帧数据都可以由这关键帧开始推出来。
I帧(关键帧) 存放的是一帧视频的完整数据。