ffmpeg中AVCodecContext等数据结构中extradata成员的数据格式及其设置

原创 2017年07月07日 16:07:56

1、引用AVCodecContext中对该数据成员的解释

/**
     * some codecs need / can use extradata like Huffman tables.
     * MJPEG: Huffman tables
     * rv10: additional flags
     * MPEG-4: global headers (they can be in the bitstream or here)
     * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger
     * than extradata_size to avoid problems if it is read with the bitstream reader.
     * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
     * - encoding: Set/allocated/freed by libavcodec.
     * - decoding: Set/allocated/freed by user.
     */
    uint8_t *extradata;
    int extradata_size;

可见它针对不同的情况有不同的格式,而比较常用的情况就是我们对视频流进行写入文件操作时(某些情况下,如通过NV12格式编码的视频流数据),或则解码视频文件时需要我们去设置。此时extradata作为一个global headers,主要保存SPS、PPS等信息,下面就针对此种情况进行说明。


2、格式规定

MPEG-4 Part 15 "Advanced Video Coding (AVC) file format" section 5.2.4.1 的规定如下:

aligned(8) class AVCDecoderConfigurationRecord { 
   unsigned int(8) configurationVersion = 1; 
   unsigned int(8) AVCProfileIndication; 
   unsigned int(8) profile_compatibility; 
   unsigned int(8) AVCLevelIndication;  
   bit(6) reserved = ‘111111’b;
   unsigned int(2) lengthSizeMinusOne;  
   bit(3) reserved = ‘111’b;
   unsigned int(5) numOfSequenceParameterSets; 
   for (i=0; i< numOfSequenceParameterSets;  i++) { 
      unsigned int(16) sequenceParameterSetLength ; 
  bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit; 
 } 
   unsigned int(8) numOfPictureParameterSets; 
   for (i=0; i< numOfPictureParameterSets;  i++) { 
  unsigned int(16) pictureParameterSetLength; 
  bit(8*pictureParameterSetLength) pictureParameterSetNALUnit; 
 } 
}


引用一个MP4文件中包含sps、pps数据的数据段

其中有一个sps块(e1 & 1F),长度为26字节(0x00 1a),后面就是这个序列参数集的真正内容;

一个pps块(01  & FF),长度为4字节(0x04),后面就是这个图像参数集的真正类容

如何提取提取数据参见:http://blog.csdn.net/a812073479/article/details/74716476


3、extradata的设置

      (1)直接设置原始的PPS、SPS数据

               数据格式如下(黄色部分为SPS数据、红色部分为PPS数据)


               将这部分数直接送给extradata的前面即可,后面填充AV_INPUT_BUFFER_PADDING_SIZE 个字节的0数据

      (2)某些情况下需要按照文档中定义的那样来设置

              参考链接:https://stackoverflow.com/questions/15263458/h-264-muxed-to-mp4-using-libavformat-not-playing-back

                                  https://devtalk.nvidia.com/default/topic/718718/-howto-h-264-mp4-container/?offset=1

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

AVCodecContext,AVStream,AVFormatContext----FFMPEG-数据结构解释

一、AVCodecContext  这是一个描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息  如果是单纯使用libavcodec,这部分信息需要调用者进行初始化;如果是使用...

FFmpeg数据结构解释(AVCodecContext,AVStream,AVFormatContext)

AVCodecContext  这是一个描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息  如果是单纯使用libavcodec,这部分信息需要调用者进行初始化;如果是使用整个...

ffmpeg v4l2 数据格式装换

  • 2017年03月28日 09:28
  • 10KB
  • 下载

ffmpeg学习十三:图像数据格式的转换与图像的缩放

一.实现图像数据格式转换与图像缩放的三个重要函数ffmpeg实现图像数据格式的转换以及图片的缩放的功能,主要使用swscale.h中的三个函数: sws_getContext() sws_sca...

FFMPEG(二) v4l2 数据格式装换

在linux系统中,摄像头数据通过v4l2采集,由于摄像头的不同,摄像头所输出的数据格式各有不同。而在进行数据编码的时候,我们一般使用平面分布而不使用交叉分布。以YUV420P 的格式使用最广泛。为了...

家庭成员的管理问题 数据结构

  • 2008年09月26日 15:42
  • 168KB
  • 下载

mat文件与txt文件的相互转换(特别的,mat转txt,数据格式设置)

1.  xx.txt转换为xx.mat Load('路径\xx.text') %加载txt文件,加载成功后,在Workspace中出现与该txt文件同名的变量。 %注意:若txt文件名中有“-”字符,...

java poi 设置数据格式

/** *設置字符數據格式樣式 */ HSSFCellStyle cell_data_default = wb.createCellStyle...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ffmpeg中AVCodecContext等数据结构中extradata成员的数据格式及其设置
举报原因:
原因补充:

(最多只允许输入30个字)