FFmpeg解封装h264 ---- 提取SPS PPS
Posted vczf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg解封装h264 ---- 提取SPS PPS相关的知识,希望对你有一定的参考价值。
前言
我们从flv和mp4等文件解封装读取的AVPacket并没有SPS、PPS数据,而是保存在 AVFormatContext -> streams -> codecpar -> extradata里面,下面我们打开一个flv文件看一下
分析一下这块数据,起始位置:0980 大小:39 结束位置:09a6
前4个字节:
0x01: version
0x42: avc profile (首个SPS的第1个字节)
0xc0: avc compatibility (首个SPS的第2个字节)
0x28: avc level (首个SPS的第3个字节,可以发现后面0x0989位置的3个字,和这3个是一样的)
第5个字节:
0xff:
6_bit: 默认111111
2_bit: 编码数据长度所需字节数
第6个字节:
0xe1: [111 00001]
3_bit: 默认 111
5_bit: 接下来的sps或pps的个数::这里为1
第7 8个字节:
0x00 0x18: 表示接下来sps或者pps的长度为24
第9个字节:
0x67: [0110 0111] nalu_type为7,表示SPS,就是说从0988到099f这24个数据为sps
第33个字节:9 (sps_pos) + 24(sps_size)
0x01: 接下来的sps或pps的个数::这里为1
第34 35字节:
0x00 0x04: 表示接下来sps或者pps的长度为4
第36个字节:
0x68: [0110 1000] nalu_type为8,表示PPS
以上是关于FFmpeg解封装h264 ---- 提取SPS PPS的主要内容,如果未能解决你的问题,请参考以下文章