个人简介
📦个人主页:一二三o-0-O的博客
🏆技术方向:C/C++客户端(直播+音视频剪辑)
📣专栏目标:务实的掌握音视频相关专业知识
🧡如果对您有帮助的话辛苦点赞支持。👍👍👍
音视频基础专栏系列
(一)【音视频基础】音频基础理论
(二)【音视频基础】视频基础理论
(三)【音视频基础】封装格式与编码数据
ffmpeg专栏系列
(一)【ffmpeg】ffmpeg命令工具的使用
(二)【ffmpeg】视频解码器
(三)【ffmpeg】ffmpeg+SDL实现播放器
封装格式
封装格式的作用
- 视频码流和音频码流按照一定的格式存储在一个文件中
MPEG-TS格式
- 不包含文件头。数据大小固定(188Byte)的TS Packet构成。
FLV格式
- 包含文件头。数据由大小不固定的Tag构成。
- 可以使用FlvAnalyzer进行格式分析
如上图所示:可以清晰的看到FLV文件格式的两部分:FLV Header以及FLV Body- Signature:FLV(3 bytes) 签名字段占用三个字节
- Version:1(1 byte) 文件版本占用一个字节
- TypeFlagsReserved:0(5 bits) 0占用5位
- TypeFlagsAudio:1(bit) 音频展示设置占用1位
- TypeFlagsReserved:0(1 bits) 0占用1位
- TypeFlagsVideo:1(bit) 视频展示设置占用1位
- DataOffset(HeaderSize):9(4 bytes) 数据偏移(这个头的字节)占用4个字节
封装格式分析
- 封装格式分析的工具:Elecard Format Analyzer
视频编码数据
- 视频编码的作用
- 将视频像素数据(RGB,YUV等)压缩成视频码流,从而降低视频的数据量。
H.264格式
- 格式简介
- 数据由大小不固定的NALU构成
- 最常见的情况下,1个NALU存储了一帧画面的压缩编码后的数据
- H.264压缩方法
- 比较复杂。包含了帧内预测、帧间预测、熵编码、环路滤波等环节构成。
- 可以将图像数据压缩100倍以上。
- 可以使用Elecard StreamEye来查看帧的排列信息。
如上图所示:h264数据中,红色的帧表示I帧;蓝色的帧表示P帧;绿色的帧表示B帧
音频编码数据
- 音频编码的作用:将音频采样数据(PCM等)压缩成音频码流,从而降低音频的数据量
AAC格式
- 格式分析
- 数据由大小不固定的ADTS构成。
- 数据由大小不固定的ADTS构成。
- AAC压缩方法
- 比较复杂,后续展开详细分析。
- 可以将音频数据压缩10倍以上。
【1】雷神博客
【2】《ffmpeg从入门到精通》第三章ffmpeg转封装