h264 annexb 比特流到 flv mux ffmpeg 库
h264 annexb bitstream to flv mux ffmpeg library
我有一个网络摄像机,它通过 SDK 调用提供 H264 annexb 比特流。
我想将此视频流打包到 FLV 容器中。到目前为止,我已经了解以下内容:-
我必须将 H264 annexb 转换为 H264 AVCC:
为此,我必须将 NAL header 字节 (0x00000001) 替换为 NALU 大小(大端格式)。
我的问题是,我如何处理 SPS 和 PPS?我应该在替换 NAL header 后按原样编写 (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
我有一个网络摄像机,它通过 SDK 调用提供 H264 annexb 比特流。 我想将此视频流打包到 FLV 容器中。到目前为止,我已经了解以下内容:-
我必须将 H264 annexb 转换为 H264 AVCC: 为此,我必须将 NAL header 字节 (0x00000001) 替换为 NALU 大小(大端格式)。
我的问题是,我如何处理 SPS 和 PPS?我应该在替换 NAL header 后按原样编写 (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