Я пытаюсь найти как аудио, так и видео потоки для mp4, используя метод ffmpeg av_seek_frame
.
Я столкнулся с проблемой при поиске, которую я исправил, изменив порядок поиска, но хотел бычтобы убедиться, что мое исправление на самом деле исправление, а не какой-то случайный взлом, который работает.
Я пытаюсь найти поток аудио и видео в первом пакете.Для видео первый пакет имеет pts 0. Для аудио первый пакет имеет pts -1024.Видеопоток имеет индекс 0, а аудиопоток имеет индекс 1. Все это было проверено с использованием ffprobe в медиа-файле для просмотра пакетов и потоков.
Следующий код не работает, он ищет аудио- и видеопотоки в пакетах с точками 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 и аудиопотока.to 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вызовы действительно имеют значение, или есть какая-то ошибка в моем коде, что это просто так скрывает?