我想重新复用传入的h264流。但是我如何为AVFormatContext选择正确的AVOutputFormat?
目前我用过:
AVOutputFormat* fmt = av_guess_format(NULL, "xxx.avi", NULL);
// Open the context
//---------------------------------------------------------------------
outFormatCtx = ffmpeg::avformat_alloc_context();
//Set the output format
//----------------------------------------------------------------------
outFormatCtx->oformat = fmt;
一切正常。 但是,如果我将第一行更改为: av_guess_format(“h264”,NULL,NULL); 由于标题/尾标错误,无法播放录制的流。
是否有更智能的方法来选择要使用的正确AVOutputFormat?
答案 0 :(得分:2)
你还在用它来播放它,以及你正在重新传输的是什么输入流?这很重要,因为您正在尝试编写原始附件H264流。
因此,如果您没有使用明确知道它支持原始附件H264的播放器,请使用其他播放器。如果你要重新输入你不确定它是MP4还是附件b格式的输入,请尝试-bsf h264_mp4toannexb。
还有可能你实际上并不想写一个原始的附件H264流。如果以上所有内容对你来说都是神秘的,你认为我在胡说八道,那可能就是这种情况。在这种情况下,请不要在调用av_guess_format()
时使用“h264”作为格式(第一个参数)(因为它主要是视频编解码器,而不是容器格式),但使用“mp4”或“avi”或“matroska”(容器格式)代替。