Как синхронизировать 2 потока из разных источников - PullRequest
0 голосов
/ 12 июня 2018

Может ли кто-нибудь указать мне правильное направление, где я могу синхронизировать живое видео и аудио поток?

Я знаю, это звучит просто, но вот моя проблема:

  • Мы2 компьютера транслируются на один компьютер по нескольким сетям (расстояние до которых может достигать сотен миль).
  • Все три компьютера синхронизируют свои системные часы с использованием NTP
  • Видео компьютер собирает видео ипередает потоки UDP на компьютер дисплея
  • Аудиокомпьютер собирает аудио, а также передает потоки на компьютер дисплея

Существует приложение, которое принимает аудиопоток.Это приложение выполняет две вещи (воспроизводит звук через динамики и отправляет информацию о задержке сети в мое приложение).У меня нет привилегий для метода, которым они передают аудио.

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

Все, что я обнаружил, предполагает, что либо аудио и видео передаются с одного компьютера, либо аудиопотоквыполняется gstreamer, чтобы я мог использовать некоторую функцию синхронизации.Я не привилегирован для реального аудиопотока.Мне дается только количество времени, в течение которого звук задерживался (сетевая задержка).

Так что периодически мне присваивается номер в качестве сетевой задержки для звука (пример: 250 мс).Мне нужно иметь возможность определить собственную сетевую задержку для видео (что я пока не знаю, как это сделать).Затем мне нужно сравнить, чтобы увидеть, больше ли задержка звука, чем задержка видеосети.Скажем, видео составляет 100 мс ... тогда мне нужно отложить показ видео на 150 мс (что я тоже не знаю, как это сделать).

Любая помощь приветствуется.Я пытаюсь понять, где кто-то еще остановился в этом проекте, поэтому мне было нелегко понять это и двигаться вперед.Также делается на Python ... что еще больше ограничивает информацию, которую я смог найти.Благодарю.

Скотт

1 Ответ

0 голосов
/ 13 июня 2018

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

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

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

Если у вас действительно нет информации о метках времени, вы можетеприходится исследовать более сложные подходы, такие как «маркеры» в метаданных потока или даже какой-либо интеллектуальный анализ аудио- и видеопотоков для синхронизации по событию в самих потоках.

...