我正在使用webrtc从浏览器发送一个视频流到gstreamer。在gstreamer中,我可以从RTCP SR数据包中得到数据包的RTP时间和NTP时间。在接收方,我要计算自发送方创建该数据包以来所用的时间。
我目前正在计算延迟
延迟=数据包的发送时间--数据包的接收时间
(所有客户端都没有相同的NTP时间)
时差=(接收方的NTP -发送方的Ntp )
我将每个RTP数据包的RTP时间转换为NTP值。
90000是时钟率。
发送数据包的时间=(RTP数据包中的RTP时间)- RTCP数据包中的RTP时间)/90000 )* 1000000000 + NTP (将值转换为ns)
时延=(接收方NTP,ns -时间差)-以ns为单位的数据包发送时间(以NTP值计)
延迟显示在本地网络中大约12046392纳米秒,我不认为它是正确的,因为我在计算中做错了什么。
发布于 2022-03-20 15:59:15
RTCP SR可以帮助将RTP (基于样本时钟的相对)时间戳映射到NTP (全局绝对墙时钟)时间戳。
不清楚“发件人.计算自该数据包在发送方创建以来所经过的时间”到底是什么意思。
如果您对计算两个RTP时间戳之间的时间差(以秒为单位)感兴趣,则需要知道产生它们的媒体/采样时钟速率。您可以通过与RTCP SR NTP时间戳相关联来获得此时钟速率,但您至少需要其中两个时间戳。
如果您想知道发送方创建RTCP SR所需的时间,只需计算当前时间与接收到的NTP时间戳之间的差异。RTCP SR时间戳实际上是创建数据包的当前时间。
RTP时间戳附加在RTCP SR数据包内的NTP 1上,是内插的当前媒体/样本时钟时间。通过这种关系,可以计算每个RTP时间戳的绝对壁时间,但至少不知道媒体时钟速率(e.b )。通过从RTCP数据包或从某个媒体头读取它,因为播放机显然需要知道媒体时钟速率以获得正确的播放速度)。
TL;DR:无法计算,因为缺少关键的信息。
编辑:你的计算在我看来不错。我假设一个包的RTP数据包含多个媒体样本。RTP时间戳引用数据包中第一个示例的第一个字节的时间。因此,数据包离开发送方的时间应该接近RTP_to_NTP_timestamp_in_seconds + ( number_of_samples_in_packet / clock )。我想一个包中的媒体数据加起来可能是几毫秒。也许number_of_samples_in_packet / clock大约是12毫秒?我想两个RTP包之间的时间也接近12 ms。
Edit2:来自RFC4587:If a video image occupies more than one packet, the timestamp SHALL be the same on all of those packets.,这也会影响您的计算。但应该是次要的,我想。
https://stackoverflow.com/questions/71296697
复制相似问题