Проблема: исходный код omxplayer называет метод FFmpeg av_seek_frame()
используя AVSEEK_FLAG_BACKWARD
флаг. Хотя не на 100% уверен, я считаю, что это стремится к ближайшему i-кадру. Вместо этого я хочу искать точные местоположения, поэтому я изменил исходный код таким образом, что теперь метод av_seek_frame()
использует флаг AVSEEK_FLAG_ANY
. Теперь, когда фильм загружается, я получаю серый экран, обычно в течение 1 секунды, во время которого я слышу звук. Я пробовал это на нескольких компьютерах (поэтому я фактически синхронизую их, в то же время), поэтому это не отдельный инцидент. Моя догадка заключается в том, что поиск не-i-кадров является более дорогостоящим вычислительным процессом, что приводит к первоначальному серому экрану.FFmpeg av_seek_frame с AVSEEK_FLAG_ANY вызывает серый экран
Вопрос: Как с помощью ffmpeg я могу дать указание аудио ждать, пока видео будет готово, прежде чем продолжить.
Я думаю, что ваш последний абзац имеет ошибку – puk
«* не может быть ключевым кадром, а это значит, что он не может быть полностью декодирован *« Что это значит, только ключевые кадры могут быть полностью ** декодированы? – puk
Я не эксперт, но вот как я его вижу: видео кодируется с помощью «_keyframes_», которые являются независимыми изображениями и «_frames_», которые полагаются на ключевые кадры. Другими словами, когда вы читаете ключевой кадр, вы можете декодировать соответствующее изображение. Но кадр не содержит всю информацию, необходимую для его декодирования, поэтому вам нужны кадры перед тем, как их декодировать (в отличие от ключевого кадра). Поэтому, если вы «прыгаете» в кадр, не прочитав ранее ключевой кадр, вы пропускаете информацию об этом кадре. Яснее? – JonesV