作用:分离某些封装格式的H264的时候,首先需要写入SPS和PPS,否则导致分离出来的数据没有SPS和PPS,而无法播放。
处理方式:
1、使用bitstream filter处理每个AVPacket包
先声明,再使用,最后关闭
AVBitStreamFilterContext *h264bsfc=av_bitstream_filter_init("av_bitstream_filter_filter");
使用
av_bitstream_filter_filter(h264bsfc,in_stream->codec, NULL, &pkt.data, &pkt.size, pkt.data, pkt.size, 0):
关闭
av_bitstream_filter_close(h264bsfc);
通过上述处理
每个AVPacket的数据有如下变化:
每个Packet的data增加了h264的NALU起始码{0,0,0,1}
每个IDR帧数据前面增加了SPS和PPS.
新版本ffmpeg中使用如下:
//声明
AVBSFContext *bsf_ctx = nullptr;
const AVBitStreamFilter *pfilter = av_bsf_get_by_name("h264_mp4toannexb");
av_bsf_alloc(pfilter, &bsf_ctx);
//使用:
av_bsf_send_packet(bsf_ctx, &packet);
av_bsf_receive_packet(bsf_ctx, &packet);
//释放:
av_bsf_free(&bsf_ctx);

1747

被折叠的 条评论
为什么被折叠?



