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