如何使用avformatcontext激活latm编码

时间:2016-11-21 04:28:52

标签: ffmpeg rtp aac

我正在尝试使用rtp encoder设置acc latm support,但无论我尝试什么,我似乎无法让它工作:

AVCodec *codec = avcodec_find_encoder_by_name("aac");
AVCodecContext *codecCtx = avcodec_alloc_context3(codec);

AVFormatContext *formatCtx = avformat_alloc_context();
avformat_alloc_output_context2(&formatCtx, NULL, "rtp", NULL);
av_opt_set(m_formatCtx, "rtpflags", "+latm",0 );
formatCtx->flags |= (AVFMT_FLAG_MP4A_LATM | AVFMT_FLAG_BITEXACT);

AVStream *avStream = avformat_new_stream(formatCtx, codec);
avStream->codec = codecCtx;

我使用错误的编解码器吗?我运行ffmpeg -codecs | grep latm找到唯一用于解码的latm编解码器,因此latm编码仅作为输出格式提供。我找到了rtpenc_chain source的标志。

我的输出总是'MPEG4-GENERIC',而我的目标是'MP4A-LATM'。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要在标头中添加rtp标志,无需编辑avcontext标志。所以:

AVDictionary *optionsDict = nullptr;
av_dict_set(&optionsDict, "rtpflags", "latm",0 );
avformat_write_header(formatCtx,&optionsDict) != 0);