IP 语音应用程序是否需要 rtp?

Is rtp necesarry for voice over ip applications?

我最近阅读了一些有关 VOIP 的内容,似乎大多数成功的 VOIP 应用程序都使用实时协议发送数据。

但是我想知道 rtp 的使用对于 voip 应用程序是否是必要的。

为什么它不能与简单的 UDP 一起使用?

使用 rtp 需要注意什么?您是否通过互联网获得更高的路由优先级(服务质量)?

是否可以在不使用 rtp 的情况下编写一个合理运行的 voip 应用程序?

是的,但至少需要一个带有序列号的 header,以便在收到数据包时重新排序。然后有效负载类型将非常方便,以便接收者可以区分语音和 DTMF 等。您可以根据自己的需要发明自己的 header,但这样您就会失去互操作性,因为 RTP 是 de-facto 标准。例如,Wireshark 理解 RTP 音频流但不理解你的。您应该在 http://www.cs.columbia.edu/~hgs/rtp/faq.html

阅读 RTP 常见问题解答

首先当你说为什么我们不能使用 UDP 时,这让我假设你在这个讨论中根本没有使用 TCP。

UDP 是包含一些 x 个字节的数据包。当它到达您的应用程序时,应用程序需要知道它的序列号以避免网络上 UDP 的各种问题(如重新排序、丢弃、重新传输)。所以需要在 UDP 数据包中有一些字节来保持序列号。然后,当您收到数据包时,应用程序可能需要知道编解码器或有效负载的类型。那么您也想将该信息保存在 udp 数据包中。同样,您需要保存数据包的时间戳,它告诉您相对于第一个数据包的时间戳。当每个数据包到达应用程序时,您还需要 ssrc、market bit 等来理解它。这对于 UDP 非常重要,因为 UDP 是无状态协议。因此,为了保存所有必要的信息,使应用程序能够理解每个数据包,您需要 RTP header。是的,RTP 是许多实时通信所基于的方式。

现在回答你的问题: 但是我想知道 rtp 的使用对于 voip 应用程序是否是必要的。 当您的应用程序以数据包而非流的形式发送数据时,RTP 是必需的。

为什么它不能与简单的 UDP 一起使用? 我上面的解释解决了这个问题。

使用 rtp 需要注意什么?您是否通过互联网获得更高的路由优先级(服务质量)? 路由是基于 IP 层完成的,udp/tcp 是传输层协议。所以我想一般不会,但可能某些服务提供商可能会通过进一步检查数据包来做到这一点。

是否可以在不使用 rtp 的情况下编写一个合理运行的 voip 应用程序? 接收 audio/video 流并播放它们,但我不知道如果其中一个连接速度变慢,您将如何进行口型同步。这完全取决于玩家的播放速度。