WebRTC: синхронизировать видеокадры между пирами JavaScript и нативным кодом

Это соответствует дизайну, который я пытаюсь реализовать надлежащим образом: у меня есть JavaScript-пэр, который отправляет видео-трек на Родной код всматриваться. В какой-то момент во время передачи (фактически сразу после установления соединения, но это может быть в любой момент) я хочу запустить секундомер на стороне JS-партнера и выполнить некоторые временные операции, фактически некоторую визуализацию на холсте с наложением воспроизведения видео , Со стороны нативного однорангового узла я хочу иметь возможность синхронизировать момент запуска секундомера на одноранговом узле JS и рассматривать только принятые кадры, записанные после этого момента, выполняя какой-либо другой вид обработки. Что я делаю сейчас (хрупкое и ограничивающее решение):

  • Как только сверстники подключаются, отслеживание RTCPeerConnection.iceConnectionStateЯ запускаю секундомер на пэре JS;
  • Как только первый webrtc::VideoFrame прибывает на нативный пир, я храню фрейм таймспам;
  • На нативном одноранговом узле я использую временную метку первого кадра для вычисления относительного времени аналогичным образом, который позволяет мне секундомер на одноранговом узле JS.

Эта конструкция ограничивает, потому что я могу захотеть синхронизироваться в любой момент, а не только при установлении соединения между равноправными узлами, а также хрупко, потому что я думаю, что протокол WebRTC позволяет отбрасывать самые первые полученные кадры по любой причине (задержки или ошибки передачи). В идеале я хотел бы взять отметку времени в выбранной точке синхронизации в одноранговом узле JS, отправить ее нативному одноранговому узлу и иметь возможность сравнивать webrtc::VideoFrame метки времени. Я не могу сделать это наивно, потому что VideoFrame::timestamp_us() явно искажено некоторым количеством, о котором я не знаю. Также я не могу интерпретировать VideoFrame::timestamp(), который плохо документирован в api/video/video_frame.h, VideoFrame::ntp_time_ms() устарела и фактически всегда возвращается -1, Что я должен сделать, чтобы выполнить такую ​​синхронизацию между двумя пирами?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]