Это соответствует дизайну, который я пытаюсь реализовать надлежащим образом: у меня есть одноранговый узел JavaScript, который отправляет видеодорожку на одноранговый узел Native Code .В какой-то момент во время передачи (фактически сразу после того, как соединение было установлено, но это может быть в любой момент), я хочу запустить секундомер на стороне 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
.Что я должен сделать, чтобы выполнить синхронизацию между двумя узлами?