从WebRTC访问RTP时间戳

时间:2018-02-22 12:50:02

标签: javascript webrtc rtp

我目前正在开展WebRTC项目。我们使用Janus Gateway进行WebRTC服务器端录制/收发等。

对于与画布相关的同步,我需要访问接收到的视频轨道的RTP时间戳。我一直在寻找一种广泛的方法。

我尝试过对等连接的getStats函数,但统计信息的时间戳是获取时间。不是数据包时间戳。

此外,在W3的标准中,它具体说明:

  

DOMHighResTimeStamp [HIGHRES-TIME]类型的时间戳,表示   播放包含该RTP数据包的RTP数据包的最近时间   资源。时间戳在[HIGHRES-TIME]中定义,对应于   当地时钟。

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

重现:

https://webrtc.github.io/samples/src/content/peerconnection/pc1/

开始呼叫后,您的相机Feed将显示对等连接。 之后打开控制台并写下:

const receivers = pc2.getReceivers();
receivers.forEach(receiver => {
    console.log(receiver.getContributingSources());
});

我的问题是,如何访问收到的RTP数据包的时间戳?或者最后收到的视频RTP时间戳?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您无法访问各个帧的时间戳(至少不是在javascript中),但是inbound-rtp的统计信息显然是您要搜索的内容。接口RTCInboundRtpStreamStatslastPacketReceivedTimestamp定义为:

  DOMHighResTimeStamp类型的

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

所有现代浏览器(Chrome,Firefox,safari,Edge)似乎都为inbound-rtp统计信息提供了一些支持。验证它们是否已经为lastPacketReceivedTimestamp提供了有意义的值。 注意:规范似乎是最新的,您的行驶里程可能会有所不同。这是一些代码:

    rtcpeer.getReceivers()[0].getStats().then(function(stats)
    {
        for (let stat of stats.values())
        {
          if (stat.type === "inbound-rtp")
            console.log(stat.lastPacketReceivedTimestamp);
        }
    });