如何以编程方式使用ffmpeg faststart标志?

时间:2014-09-05 14:34:16

标签: c++ ffmpeg mp4

我尝试使用H264,AAC编解码器和mp4容器在Android上转换视频进行播放。视频与非系统播放器正常播放。但系统播放器显示错误“无法播放此视频”。 我发现问题出在moov atom中,它在文件末尾写入。 当我使用“-movflags + faststart”ffmeg标志来转换视频时,它会正常播放,但是当我尝试以编程方式执行此操作时,它不会产生任何结果。我使用以下代码:

av_dict_set( &dict, "movflags", "faststart", 0 );
ret = avformat_write_header( ofmt_ctx, &dict );

3 个答案:

答案 0 :(得分:1)

我认为这个答案很晚,但是对于仍然可能面临相同问题的任何人:这可能是由于未在音频/视频AV_CODEC_FLAG_GLOBAL_HEADER中设置AVCodecContext引起的。许多指南显示,它需要在AVFormatContext中进行设置,但需要在AVCodecContext中进行设置,然后才能使用avcodec_open2打开它。

if (format_context->oformat->flags & AVFMT_GLOBALHEADER) {
  video_codec_context->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
}
avcodec_open2(video_codec_context, video_codec, nullptr);

答案 1 :(得分:0)

此代码可以正常工作:

av_dict_set( &dict, "movflags", "faststart", 0 );
ret = avformat_write_header( ofmt_ctx, &dict );

但问题没有解决。我仍然无法在Android设备上播放已转换的视频。

答案 2 :(得分:0)

也许该视频与您的Android手机不兼容?尝试使用h264基线配置文件进行转换。