我有一个IP摄像机,该摄像机通过SDK调用提供了H264 annexb比特流。
我想将此视频流打包到FLV容器中。到目前为止,我已经了解以下内容:

我必须将H264 annexb转换为H264 AVCC:
为此,我必须将NAL标头字节(0x00000001)替换为NALU的大小(大端格式)。

我的问题是,我该怎么处理SPS和PPS?我应该在替换NAL标头后照原样编写(av_interleaved_write_frame)吗?还是我根本不写这些框架?

我读到有关AVCC需要额外数据的信息。我该如何构造呢?我该在哪里传递?

最佳答案

首先从摄像机中检索SPS / PPS。将SPS / PPS写入AVCC额外数据格式(请参见此处:Possible Locations for Sequence/Picture Parameter Set(s) for H.264 Stream

设置AVCodecContext.extradata

void *extradata = /**/;
int extradata_size = /**/;
codecCtx->extradata_size = extradata_size;
codecCtx->extradata = av_malloc ( codecCtx->extradata_size );
memcpy ( codecCtx->extradata, extradata, codecCtx->extradata_size);


致电avcodec_open2之前

09-05 09:45