Как синхронизировать 2 стрима ?

Kirill

Member
Из одного места мы хотим запустить
1) Видео стрим - webrtc
2) Двустороннюю аудиосвязь (по запросу), отдельным потоком - webrtc
Можно ли как-то синхронизировать видео стрим и аудио связь ?
 

Max

Administrator
Staff member
Двустороннюю аудиосвязь (по запросу), отдельным потоком - webrtc
Вот это не понятно.
Что из себя представляет эта двухсторонняя аудио связь и какие потоки в результате должны оказаться на сервере.

Например:
1. User1 и User2 имеют двухстороннюю аудиосвязь.
Т.е. User1 публикует audio-only поток stream1, User2 играет audio-only stream2 поток и наоборот.
2. User1 публикует video-only поток stream3 и желает чтобы этот поток был синхронизован с исходящим аудио потоком stream1
3. User3 смотрит поток stream3 и видит, что на нем видео и аудио синхронизованы.

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

Kirill

Member
videoStream1 (без аудио снимает User2) идет на WCS (push) c ip камеры .
User1 и User2 получают videoStream1
User1 запрашивает двустороннюю аудиосвязь с User2 .

Задержка между временем (реалтайм) на видео и аудио будет отличаться, можно ли как-то сделать так, чтобы аудио стрим и видео стрим имели примерно одинаковые задержки ?
 
Last edited:

Max

Administrator
Staff member
Не понятен сам смысл происходящего, требования.

Похоже на два кейса:

1. Озвучка.

С IP камеры приходит поток без аудио, который User1 озвучивает в реальном времени.
В результате User2 видит видео, синхронно озвученное User1.
Например, сурдоперевод в обратную сторону из жестов в голос.
В этом случае, User1 должен забрать поток с IP камеры, добавить к нему свой голос и ретранслировать аудио+видео на сервер отдельным потоком.
Только в этом случае поток будет полностью синхронным по аудио и видео.

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

Другой способ - нам доработать Web SDK чтобы была возможность в браузере захватить стрим, который пришел с камеры, добавить к нему микрофон и опубликовать на сервер по WebRTC, т.е. браузером выполнить захват с IP камеры в качестве источника стрима как это делает manycam. Вероятно это можно сделать в Chrome с помощью MediaStream API.

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

2. Совместный просмотр. Игра.

Если User1 и User2 просто смотрят то, что происходит на экране и должны видеть это одновременно и обсуждать голосом, то синхронизация не требуется.
Они оба будут получать картинку с примерно одинаковой задержкой, менее 0.5 секунды при нормальной связи.
Например, если должны угадать что показывает им видео.
 
Top