我最近已经阅读了一些关于VOIP的内容,因为看起来最成功的VOIP应用程序使用实时协议来发送数据。
但是我想知道是否需要使用rtp进行voip应用。
为什么它也不能用简单的UDP工作?
使用rtp的读取内容是什么?您是通过互联网获得更高的路由优先级(服务质量)吗?
是否可以在不使用rtp的情况下编写合理工作的voip应用程序?
答案 0 :(得分:1)
首先,当你说为什么我们不能使用UDP时,这导致我假设你根本没有使用TCP进行讨论。
UDP是包含一些x个字节的数据包。当它到达你的应用程序时,应用程序需要知道它的序列号,以避免网络上UDP的各种问题(如重新排序,丢弃,重新传输)。因此需要在UDP数据包中保留一些字节以保留序列号。然后,当您收到数据包时,应用程序可能需要知道编解码器或有效负载的类型。那么你也想将这些信息保存在udp包中。类似地,您需要保存数据包的时间戳,该时间戳告诉您相对于第一个数据包的时间戳。你还需要ssrc,market bit等来了解eack数据包到达应用程序时的意义。这对于UDP非常重要,因为UDP是无状态协议。因此,要保存所有必要的信息以使应用程序能够理解每个数据包,您需要RTP标头。是的,RTP是许多实时通信的基础。
现在回答你的问题: 但是我想知道是否需要使用rtp进行voip应用程序。 当您的应用程序以数据包而不是流方式发送数据时,RTP是必需的。
为什么不能使用简单的UDP呢? 我上面的解释解决了这个问题。
使用rtp的读取内容是什么?您是通过互联网获得更高的路由优先级(服务质量)吗? 路由基于IP层完成,udp / tcp是传输层协议。所以我猜一般不会,但可能是某些服务提供商可能会通过进一步检查数据包来做到这一点。
是否可以在不使用rtp的情况下编写合理工作的voip应用程序? 接收音频/视频流并播放它们但我不知道如果其中一个连接变慢,你将如何进行唇形同步。这一切都取决于玩家的播放速度。
答案 1 :(得分:0)
是的,但是至少需要一个带序列号的标题,以便在收到时重新排序数据包。然后有效载荷类型将非常方便,以便接收器可以区分语音和例如DTMF。您可以根据需要创建自己的标题,但随后您将失去互操作性,因为RTP是事实上的标准。例如,Wireshark了解RTP音频流但不了解您的。您应该阅读http://www.cs.columbia.edu/~hgs/rtp/faq.html
处的RTP常见问题解答