存储传入流时如何真正选择正确的格式?
How can I really pick up the correct format when storing incoming stream?
我想重新混合传入的 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);
由于 header/tailer.
错误,无法播放录制的流
有没有更聪明的方法来选择要使用的正确 AVOutputFormat?
你用什么来播放它,你正在重新混合什么输入流?这很重要,因为您正在尝试编写原始 annexb H264 流。
- 并非所有玩家都支持这一点。例如。 VLC 支持它,但 Windows Media Player 不支持。
- 它要求H264数据包实际上是annexb格式。如果你正在重新混合,例如一个 mp4 文件,H264 数据包将是 mp4 格式,你需要一个比特流过滤器来转换它们 (-bsf h264_mp4toannexb).
因此,如果您使用的播放器不是您明确知道它支持原始 annexb H264,请使用其他播放器。如果您正在重新混合您不确定它是 MP4 还是 annexb 格式的输入,请尝试 -bsf h264_mp4toannexb.
也有可能您实际上并不想编写原始的 annexb H264 流。如果以上所有内容对您来说都是神秘的,并且您认为我在胡说八道,那么情况可能就是这样。在这种情况下,不要在调用 av_guess_format()
时使用 "h264" 作为格式(第一个参数)(因为它主要是视频编解码器,而不是容器格式),而是使用 "mp4" 或"avi" 或 "matroska"(容器格式)。
我想重新混合传入的 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); 由于 header/tailer.
错误,无法播放录制的流有没有更聪明的方法来选择要使用的正确 AVOutputFormat?
你用什么来播放它,你正在重新混合什么输入流?这很重要,因为您正在尝试编写原始 annexb H264 流。
- 并非所有玩家都支持这一点。例如。 VLC 支持它,但 Windows Media Player 不支持。
- 它要求H264数据包实际上是annexb格式。如果你正在重新混合,例如一个 mp4 文件,H264 数据包将是 mp4 格式,你需要一个比特流过滤器来转换它们 (-bsf h264_mp4toannexb).
因此,如果您使用的播放器不是您明确知道它支持原始 annexb H264,请使用其他播放器。如果您正在重新混合您不确定它是 MP4 还是 annexb 格式的输入,请尝试 -bsf h264_mp4toannexb.
也有可能您实际上并不想编写原始的 annexb H264 流。如果以上所有内容对您来说都是神秘的,并且您认为我在胡说八道,那么情况可能就是这样。在这种情况下,不要在调用 av_guess_format()
时使用 "h264" 作为格式(第一个参数)(因为它主要是视频编解码器,而不是容器格式),而是使用 "mp4" 或"avi" 或 "matroska"(容器格式)。