Kar*_*tal 5 javascript rtp webrtc
我目前正在开发一个 WebRTC 项目。我们使用 Janus Gateway 进行 WebRTC 服务器端记录/收发等。
对于与画布相关的同步,我需要访问接收到的视频轨道的 RTP 时间戳。一段时间以来,我一直在广泛寻找一种方法。
我尝试过对等连接的 getStats 函数,但统计数据的时间戳是获取时间。不是数据包时间戳。
另外,W3的标准中明确指出:
DOMHighResTimeStamp [HIGHRES-TIME] 类型的时间戳,指示包含源的 RTP 数据包的最近播放时间。时间戳定义在[HIGHRES-TIME]中,对应于本地时钟。
getContributingSources()
可以通过对象的函数访问它RTCRtpReceiver
。但我注意到,该函数返回一个空数组。
重现:
https://webrtc.github.io/samples/src/content/peerconnection/pc1/
按“开始”和“呼叫”后,应显示相机源和对等连接。之后打开控制台并写入:
const receivers = pc2.getReceivers();
receivers.forEach(receiver => {
console.log(receiver.getContributingSources());
});
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何访问收到的 RTP 数据包的时间戳?或者最后接收到的视频 RTP 时间戳?
提前致谢。
编辑:Chrome 从版本76开始支持标准化统计数据。
您无法访问单个帧时间戳(至少在 javascript 中不行),但inbound-rtp
统计信息似乎绝对是您要搜索的内容。该接口RTCInboundRtpStreamStats
定义lastPacketReceivedTimestamp
为:
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);
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4555 次 |
最近记录: |