问题是:使用 ffmpeg 解码 H264 流时,我可以获得 SPS 和 PPS 的原始数据,但我不知道如何将它们填充到 extradataAVCodecContext 字段中。没有 extradata ,我无法正确解码帧。每次我调用 avcodec_decodec_video2 时,返回值都是正数,但 got_picture 标志总是 zero
我正在处理的流看起来像这样:

[0x67]...[0x68]...[0x61]...[0x61]...  .......  [0x61]...[0x67]...[0x68]...  ......

最佳答案

您提到的数据是一个字节流,其中包含 SPS 和 PPS 的 NAL 单元。 extradata 反过来需要一个指向 AVC 解码器配置记录的指针,这是您拥有额外格式的数据。

有关详细信息,请参阅 MPEG-4 第 15 部分“高级视频编码 (AVC) 文件格式”第 5.2.4.1 节。

5.2.4.1.1 Syntax

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;
 }
}

关于video - 如何用 SPS 和 PPS 数据填充 AVCodecContext 的 'extradata' 字段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29790334/

10-12 00:19