Я использую WebRTC
для отправки видео с сервера на браузер клиента (используя собственный WebRTC API
и MCU WebRTC
сервер, например Kurento).
Прежде чем отправлять его клиентам, каждый кадр видео содержит метаданные (например, субтитры или любой другой аппликативный контент). Я ищу способ отправить эти метаданные клиенту, чтобы он оставался синхронизированным (до момента его фактического представления). Кроме того, я хотел бы иметь доступ к этим данным со стороны клиента (по Javascript).
Некоторые варианты, о которых я думал:
- Отправка данных с помощью WebRTC DataChannel. Но я не знаю, как обеспечить синхронизацию данных по каждому кадру. Но я не мог найти способ обеспечить передачу данных по каналу данных и синхронизацию видеоканала (опять же, я надеюсь получить точный уровень одиночного кадра).
- Отправка данных вручную клиенту в некотором роде (WebRTC DataChannel, websockets и т.д.) с отметками времени, которые соответствуют отметкам времени видео. Однако, даже если Kurento или другие средние серверы сохраняют информацию о отметке времени в видео, согласно следующему ответу, нет подходящего способа получить метки времени видео из javascript:
Как использовать API Javascript WebRTC для доступа к исходящей звуковой метке RTP в отправителе и временной отметке времени RTP в приемнике?. Я думал об использовании стандартного видеоэлемента
timeupdate
, но я не знаю, будет ли он работать для точного уровня кадра, и я не уверен, что это значит в реальном видео, как в WebRTC. - Отправка данных вручную и присоединение к видео в качестве другого
TextTrack
. Затем используйтеonenter
иonexit
, чтобы прочитать его синхронно: http://www.html5rocks.com/en/tutorials/track/basics/. Он по-прежнему требует точных временных меток, и я не уверен, как узнать, какие временные метки и если Куренто передает их как есть. - Используя API статистики WebRTC для ручного подсчета кадров (используя
getstats
) и надейтесь, что информация, предоставленная этим API, будет точной.
Каков наилучший способ сделать это и как решить проблемы, о которых я упомянул в любом случае?
EDIT: Требуется точная синхронизация (с разрешением не более одного кадра) метаданных с соответствующим фреймом.