Имеет ли значение порядок поиска потока для ffmpeg av_seek_frame ()? - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь найти как аудио, так и видео потоки для 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вызовы действительно имеют значение, или есть какая-то ошибка в моем коде, что это просто так скрывает?

1 Ответ

0 голосов
/ 02 января 2019

Поиск влияет на все потоки.Запрос на поиск обрабатывается демультиплексором.Он переместится в некоторую точку файла или мультиплексированного потока.Последующее демультирование даст вам пакеты с этого момента.Отдельный поиск в потоках dexmed не поддерживается.

В вашем случае вы можете обратиться к точке, в которой демультиплексирование выдаст вам все пакеты, которые вам требуются, но затем пропустите слишком ранние.

Так что да, порядок в вашем примере кода имеет значение.Но это важно только потому, что аудио и видео пакеты хранятся в вашем mp4-файле.

...