【发布时间】:2019-05-28 03:36:06
【问题描述】:
我正在尝试使用 ffmpeg av_seek_frame 方法寻找 mp4 的音频和视频流。
我在寻找时遇到了一个问题,我已通过更改我的寻找顺序进行了补救,但我想确保我的修复实际上是一个修复,而不是一些巧合的破解。
我正在尝试寻找第一个数据包的音频和视频流。对于视频,第一个数据包的 pts 为 0。对于音频,第一个数据包的 pts 为 -1024。视频流的索引为 0,音频流的索引为 1。这一切都已在媒体文件上使用 ffprobe 来查看数据包和流进行了验证。
以下代码不起作用,它会同时寻找音频和视频流到 pts 为 0 的数据包:
for (int i = format_context->nb_streams - 1; i >= 0; --i) {
AVStream* stream = format_context->streams[i];
av_seek_frame(format_context, i, stream->first_dts, flags);
}
但这会正确地将视频流搜索到 pts 0 并将音频流搜索到 pts -1024:
for (int i = 0; i < format_context->nb_streams; ++i) {
AVStream* stream = format_context->streams[i];
av_seek_frame(format_context, i, stream->first_dts, flags);
}
请注意,在第一个示例中,音频先于视频搜索,而在第二个示例中,视频先于音频搜索。
av_seek_frame 调用的顺序是否真的很重要,或者我的代码中的其他地方是否存在恰好掩盖的错误?
【问题讨论】:
-
另外,我使用的
flags是AVSEEK_FLAG_BACKWARD。
标签: c audio video ffmpeg decoding