Время прыжков видео в режиме “Картинка в картинке” при повороте, когда запись ведется на мобильный телефон.

Вопрос или проблема

Я использую свой телефон для потоковой передачи живых видео на свой сервер обычным способом с использованием javascript и getUserMedia() и т.д. Затем я использую FFMPEG для кодирования в реальном времени и дополнительно накладываю на него видео оверлея.

По какой-то причине каждый раз, когда я поворачиваю телефон в альбомный режим или обратно в портретный режим, видео оверлея сдвигается вперед во времени. Видео оверлея не изменяется, пока потоковое видео кодируется. Это просто видеофайл с жесткого диска, никакого потока. Есть идеи, в чем дело?

Я пробовал разные версии FFMPEG, но поведение всегда одно и то же.

Оранжевый – это живой поток. Зеленый – это оверлей.

Команда FFMPEG

ffmpeg -re -i strm.webm -i overlay.webm -filter_complex "[0:v]scale=640:480:force_original_aspect_ratio=decreasepad=640:480:-1:-1:color=black[main];[1]scale=iw/1.5:-1setpts=PTS-STARTPTS,format=yuva420p[ovrl]; [main][ovrl]overlay=W-w-10:10[v]; [0:a][1:a]amerge[a]" -r 24 -deadline realtime -crf 22 -cpu-used 15 -level 2.0 -map "[v]" -map "[a]" -c:a aac -c:v libvpx -pix_fmt nv12 -threads 4 -strict -2 -auto-alt-ref 0 -b:v:1 1800k -s:v:1 1280x720 -b:v:0 300k -s:v:0 640x480 -bf 1 -keyint_min 48 -g 48 -sc_threshold 1 -b_strategy 0 -ar:a:1 96000 -scenario livestreaming -look_ahead 0 -seg_duration 2 -remove_at_exit 1 -streaming 1 -window_size 30 -adaptation_sets "id=0,streams=v id=1,streams=a" -utc_timing_url https://time.akamai.com/?iso -live 1 -y -f dash manifest.mpd

Ответ или решение

Проблема временных скачков видео при повороте экрана мобильного телефона при записи

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

1. Синхронизация потоков

При использовании ffmpeg для кодирования двух потоков (живого видео и накладного видео), система должна правильно синхронизировать аудио и видео. При изменении ориентации экрана может происходить сбой синхронизации, который вызывает временные скачки. Рекомендуется проверить настройки временных меток (PTS) ваших видео:

  • Убедитесь, что используете параметр setpts=N/(FRAME_RATE*TB) для явного указания временных меток для накладного видео.

2. Изменение кодека или параметров обработки

Попробуйте использовать разные кодеки и параметры, которые могут сгладить процесс кодирования в реальном времени. Например, вместо libvpx вы можете протестировать кодек libx264, используя менее агрессивные параметры:

-c:v libx264 -preset fast -crf 22

Это может помочь улучшить производительность и стабильность при обработке видео, особенно в условиях изменения ориентации.

3. Обработка событий изменения ориентации

Необходимо убедиться, что ваша JavaScript-логика правильно обрабатывает события изменения ориентации экрана. Добавление задержки при переключении ориентации, а также пауза в потоке во время обработки события может улучшить синхронизацию видео.

4. Тестирование с минимизацией внешних факторов

Рекомендуется провести тестирование с минимально возможной конфигурацией: отключить дополнительные фильтры, временные метки и другие параметры, чтобы установить, вызвана ли проблема одним из них.

5. Мониторинг и диагностика

Используйте опции логирования FFmpeg для более тщательного мониторинга во время записи:

-loglevel verbose

Это поможет выявить скрытые ошибки и предупредительные сигналы.

Заключение

Таким образом, проблемы с временными скачками в видео при изменении ориентации экрана мобильного устройства могут быть вызваны сочетанием проблем синхронизации потоков, ошибок в обработке событий и настроек кодирования. Следуя вышеперечисленным рекомендациям и проверяя каждый параметр, вы сможете более точно диагностировать и решать вашу проблему.

Оцените материал
Добавить комментарий

Капча загружается...