Javascript 从WebRTC访问RTP时间戳

Javascript 从WebRTC访问RTP时间戳,javascript,webrtc,rtp,Javascript,Webrtc,Rtp,我目前正在从事一个WebRTC项目。我们使用Janus网关进行WebRTC服务器端记录/收发等 对于与画布相关的同步,我需要访问接收到的视频曲目的RTP时间戳。我已经广泛地寻找一种方法有一段时间了 我尝试过对等连接的getStats函数,但是stats的时间戳是采集时间。不是数据包时间戳 此外,在W3的标准中,它特别指出: DOMHighResTimeStamp[HIGHRES-TIME]类型的时间戳,指示 包含 来源。时间戳在[HIGHRES-TIME]中定义,并对应于 本地时钟 可通过RTC

我目前正在从事一个WebRTC项目。我们使用Janus网关进行WebRTC服务器端记录/收发等

对于与画布相关的同步,我需要访问接收到的视频曲目的RTP时间戳。我已经广泛地寻找一种方法有一段时间了

我尝试过对等连接的getStats函数,但是stats的时间戳是采集时间。不是数据包时间戳

此外,在W3的标准中,它特别指出:

DOMHighResTimeStamp[HIGHRES-TIME]类型的时间戳,指示 包含 来源。时间戳在[HIGHRES-TIME]中定义,并对应于 本地时钟

可通过
RTCRtpReceiver
对象中的
getContributingSources()
函数访问。但我注意到,该函数返回一个空数组

复制:

开始呼叫后,您的相机馈送和对等连接将出现。 之后,打开控制台并写入:

const receivers = pc2.getReceivers();
receivers.forEach(receiver => {
    console.log(receiver.getContributingSources());
});
我的问题是,如何访问接收到的RTP数据包的时间戳?还是上次接收到的视频RTP时间戳


提前感谢。

编辑:Chrome自版本起支持标准化统计数据

您无法访问单个帧时间戳(至少不能在javascript中访问),但stats似乎是您要搜索的确切内容。接口具有
lastPacketReceivedTimestamp
,定义为:

DOMHighResTimeStamp类型的lastPacketReceivedTimestamp表示 此SSRC接收最后一个数据包的时间戳。这 与时间戳不同,时间戳表示 统计数据由本地端点生成

所有现代浏览器(Chrome、Firefox、safari、Edge)似乎都对
入站rtp
stats提供了一些支持。验证它们是否已经为
lastPacketReceivedTimestamp
提供了有意义的值注意:规格似乎是最新的,您的里程数可能会有所不同。下面是一些代码:

rtcpeer.getReceivers()[0].getStats().then(函数(stats)
{
for(让stats.values()的stat
{
如果(stat.type==“入站rtp”)
console.log(stat.lastPacketReceivedTimestamp);
}
});

那个项目现在已经是老生常谈了,但我会在几天后检查一下,并尝试提供一个解决方案。谢谢,不客气。如上所述,该规范可能太新了,我已经在验证scarse对时间戳信息的支持,例如在
outbound rtp
stats中,chrome不公开时间戳,firefox显示strage值。当希望更多的浏览器正确地实现它时,这些信息可能会有用。我有google chrome 73.0.3683.103版。运行上述代码,但似乎不存在
lastPacketReceivedTimestamp
!该规范也没有强制要求。通过
stat.type==“inbound rtp”
标识的
RTCInboundRtpStreamStats
stat没有属性/name
lastPacketReceivedTimestamp
。看起来这不是强制性的。如果您能帮助获取视频曲目的此属性,我们将不胜感激。@ksridhar请至少升级到chrome 76。他们只是最近才添加这些数据谢谢你。我这样做了。rtp时间戳可以通过rtcrtPreciver.getSynchronizationSources获得。看见