分离某些封装格式(例如MP4/FLV/MKV的时候)中的h264的时候,首先要写入SPS和PPS,否则会导致分离出来的数据没有SPS和PPS而无法进行播放。需要使用FFmpeg中的名称为"h264_mp4toannexb"的BitStreamFilter进行处理。
老版本:
//声明
AVBitStreamFilterContext* h264bsfc=av_bitstream_filter_init("h264_mp4toannexb");
//使用
av_bitstream_filter_filter(h264bsfc,in_stream->codec,NULL,&pkt.data,&pkt.size,pkt.data,pkt.size,0);
//释放
av_bitstream_filter_close(h264bsfc);
新版本
//声明
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);