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的主要内容,如果未能解决你的问题,请参考以下文章

使用ffmpeg实现对h264视频解码 -- (实现了一个易于使用的c++封装库)

流媒体开发19FFMpeg解封装流程分析

流媒体开发19FFMpeg解封装流程分析

流媒体开发19FFMpeg解封装流程分析

H264 NALU 使用PS封装 RTP发送

流媒体开发19FFMpeg解封装流程分析