我想重新复用传入的 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?
最佳答案
你用什么来回放它,你在重新混合什么输入流?这很重要,因为您正在尝试编写原始附件 B H264 流。
因此,如果您没有使用您明确知道它支持原始附件b H264 的播放器,请使用其他播放器。如果您要对不确定是 MP4 还是附件 b 格式的输入进行重新混合,请尝试 -bsf h264_mp4toannexb。
还有一种可能是您实际上并不想编写原始附件b H264 流。如果以上所有内容对您来说都是神秘的,并且您认为我在胡说八道,那么可能就是这种情况。在这种情况下,不要在调用
av_guess_format()
时使用“h264”作为格式(第一个参数)。 (因为它主要是视频编解码器,而不是容器格式),而是使用“mp4”或“avi”或“matroska”(容器格式)。
关于ffmpeg - 存储传入流时如何真正选择正确的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35137957/