gpt4 book ai didi

timestamp - 如何计算音频流中每个数据包的 RTP 时间戳

转载 作者:行者123 更新时间:2023-12-04 23:01:01 25 4
gpt4 key购买 nike

我阅读了 RTP 规范,但似乎无法理解 RTP 数据包时间戳。我试图在我的服务器中以不同的方式实现它,但我无法让播放器正确播放。

我在这里遇到的“错误”行为是(我使用 VLC 播放器将 RTSP url 播放到我的服务器)我发现播放器的日志说 “缓冲方式为时已晚” “错误的 PTS 值” .这意味着音频帧以某种方式到达时间戳未设置正确的数据包。我试图以不同的方式实现时间戳的生成,但没有这样的运气。

我需要一些详细的资源或引用资料,让我真正了解 RTP 时间戳如何工作和生成。

最佳答案

音频和视频时间戳的计算方式相同。

音频 RTP 有效载荷格式通常使用 8Khz 时钟。然后获取包含例如的第一个音频样本20 毫秒并分配此时间戳 t = 0。20 毫秒是 1/50 秒,因此对于以下示例,这等于 8000/50 = 160 时间戳增量。对于音频,您可以根据采样率、每个样本的位数和 channel 数计算采样持续时间。对于实时源,样本可能已经带有时间戳,您只需将时间戳转换为 RTP 时间戳。

另请注意,RTP 时间戳应从随机数开始,而不是从零开始。

可以在 Colin Perkins 的书 RTP - Audio and video for the Internet 中找到 RTP 的一般引用资料。 .虽然有些信息可能已经过时,但它会让您更好地了解 RTP。

更新:
挂钟是通过使用 RTCP SR 中的 NTP 时间戳确定的,它告诉您 RTP 时间戳映射到的时间,即 RTP 时间戳 160 = 某个日期时间。这是必需的,例如用于同步视频,其中两个 RTP 时间戳都使用不同的随机偏移量。当然,日期/时间的有效性取决于发件人如何计算 NTP 时间戳,并且不能保证这反射(reflect)了实际日期/时间。您可以使用wireshark 嗅探流量,它会告诉您NTP 时间戳表示的日期/时间。

更新 2:

这取决于客户端的期望以及客户端的实现方式。如果您正在编写自己的 RTSP 客户端,则可能就足够了。例如,如果您编写了 DirectShow 源过滤器,则可以将 RTP 时间戳直接转换为媒体时间戳,这样就可以了。但是,由于您使用的是现有客户端,因此它可以例如因为客户端只使用同步的 RTP 时间戳,所以在这种情况下它是不够的。总之,它取决于客户端的实现。我不确定 VLC 期待什么。

关于timestamp - 如何计算音频流中每个数据包的 RTP 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24658525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com