Как объединить аудио и видео из разных источников для видео Kinesis

Как мне поместить несвязанный звук в любой сгенерированный видеопоток таким образом, чтобы они синхронизировались в gstreamer?

Контекст:

Я хочу транслировать звук из icecast в поток Kinesis Video, а затем просматривать его с помощью плеера Amazon. Плеер работает только при наличии видео и звука, поэтому я создаю видео с помощью testvideosrc.

Видео и аудио должны быть синхронизированы с точки зрения временных меток, иначе приемник Kinesis kvssink выдает ошибку. Но поскольку это два отдельных источника, они не находятся в приемнике.

Я использую gst-launch-1.0 для запуска моего конвейера.

Моя основная попытка была такой:

gst-launch-1.0 -v \
    videotestsrc pattern=red ! video/x-raw,framerate=25/1 ! videoconvert ! x264enc ! h264parse ! video/x-h264,stream-format=avc,alignment=au !  \
    queue ! kvssink name=sink stream-name="NAME" access-key="KEY" secret-key="S_KEY" \
    uridecodebin uri=http://ice-the.musicradio.com/LBCLondon ! audioconvert ! voaacenc ! aacparse ! queue ! sink.

Сообщение об ошибке, которое я получаю, переводится как STATUS_MAX_FRAME_TIMESTAMP_DELTA_BETWEEN_TRACKS_EXCEEDED

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


person user4705201    schedule 17.08.2019    source источник


Ответы (1)


Есть разные значения слова «синхронизация». Давайте на мгновение проигнорируем синхронизацию губ (когда аудио и видео совпадают друг с другом).

Есть синхронизация с точки зрения меток времени - например, несут ли они аналогичные временные метки в своем представлении. И синхронизация с точки зрения того, когда в реальном времени эти образцы с отметками времени действительно поступают в приемник (задержка).

По ошибке сложно сказать, на какую именно раковину жалуется.

Может быть, для начала попробуйте x264enc tune=zerolatency, так как без этих опций кодировщик производит двухсекундную задержку, что может вызвать проблемы при определенных требованиях.

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

person Florian Zwoch    schedule 17.08.2019
comment
›› Приемник должен фактически выполнять буферизацию и синхронизацию. Это может быть ключевым моментом - возможно, эта конкретная раковина не справляется с этим. Похоже, что он терпит задержку в 60 кадров (~ 2 секунды). - person user4705201; 18.08.2019