1

我只有 h.264 编码的视频流,我想制作 mp4 文件。

/* 查找 mp4 的输出格式 */

m_pOutputFormat=av_guess_format("mp4", NULL, NULL);

如果(!m_pOutputFormat)返回假;// 找不到合适的输出格式(mp4)。

在这段代码中,我得到的视频编解码器不是 h264 的 mpeg,我认为这是因为我在没有 libx264 的情况下构建了 ffmpeg。(而且我不想用 libx264 构建 ffmpeg 以获得许可)

m_pOutputFormat->video_codec=CODEC_ID_H264;

当我将其 video_codec 更改为 CODEC_ID_H264 时,某些播放器(kmplayer)可以正常工作。但它不适用于 ipod、QuickTime。

此代码可能是错误的,因为它无法更改 codec_tag 值(此变量具有 const 属性)。


1.如何在不重新编译 libav+libx264 的情况下获得 av_guess_format("mp4",NULL,NULL) 的其他结果?

2.如何正确制作mp4文件?

4

1 回答 1

0

我认为您不需要 libx264 来正确处理 h264 流,因为 libx264 是编码器,并且我使用未使用 libx264 编译的 libav 处理了 h264 数据包。它适用于从文件中读取数据包并将其写入另一个文件。

至于对 av_guess_format 的调用,您可以为 h264 提供适当的 MIME 类型(例如视频/h264 或任何其他),或者只为函数提供另一个短类型名称。这必须是正确的:av_guess_format("h264",NULL, NULL)。

在这里查看一些代码示例(objective-C): http: //libav-users.943685.n4.nabble.com/Libavcodec-encoding-with-libx264-td3250373.html

于 2011-09-06T09:22:43.113 回答