2011-11-01 114 views
2

我正在为Android实现一个实时 - 多用户语音传输应用程序。 我已经读过,作为一个标准 - RTP数据包被封装到SIP然后发送到目的地。这样做的好处是什么?SIP与直接TCP套接字

我的想法是使用服务器,只是为了接收来自节点和打开套接字的控制消息。所有这些节点将在1组中。我发出这些节点中的每一个的IP地址,以便单个发送者可以将其数据包直接组播到目的地。

这里有致命的缺陷吗? (iam不关心功耗) SIP如何做得更好?还是呢?

感谢

回答

2

SIP或会话发起协议是专门设计来解决你正在试图解决这个问题的协议。一般来说,你应该重复使用(而不是重新发明轮子)的原因是因为其他人已经研究过相同的问题,并且可能提出了一个更好的解决方案,作为一个集体小组,而不是作为一个个体。当然,这并非总是如此,但总的来说,它是成立的!

如果您想了解SIP,您可以学习RFC 3261 specification,或者如果您想快速浏览一下Wikipedia entry

话虽这么说,如果你不需要完整,仔细测试协议的开销,你可以滚你自己的,但要确保,当你做这个决定你知道你在什么前述并有这是一个很好的理由。

SIP是一种通常在TCP上运行的信令协议(尽管不是必需的),如果仔细观察,您会发现它在很多方面与HTTP非常相似。就像HTTP一样,它可以传输大量的有效载荷,并且可以通过文本标题来传输,就像HTTP可以用来传输HTML,XML,纯文本或任意二进制有效载荷一样。

+0

那么sip有什么意义?我只想要一个套接字连接,从我的节点到服务器。一旦我收到地址,我可以开始我的直接rtp数据包传输。即使有一个节点出现故障,我也不在乎......我只是要用几个节点insode 1接入点进行测试..所以,不要以为性能会有很大差异......是吧? –

+0

套接字很好,但你需要考虑NAT穿越问题 - 特别是对于RTP的东西。为此,使用像SIP这样的东西意味着它将更容易管理,因为解决方案已经存在(STUN,TURN,ICE),您可以从第三方获得这些解决方案。同样的逻辑适用于其他功能,如多点支持,安全性等。 –

+0

SIP的要点是它是一个已经建立的协议,用于完成您正在尝试做的事情。即使您最初只需要一小部分SIP功能,您仍然可以从实施部分SIP支持作为您的信令协议中受益。 –

3
  • RTP未被“封装到SIP分组”中。 SIP是一种信令协议。 RTP是一种媒体流协议。 SIP用于协商和建立(并拆除)媒体流。
  • TCP是媒体(RTP)数据包的可怕选择;如果你提出这个建议,从你的写作中就不清楚了。
  • 多播不太可能适用于许多网络路径/收件人。
  • 路由器播放传入数据的快乐地狱;您将需要的不仅仅是SIP来处理开放网络上的用户。请参阅STUN,TURN,ICE,UPnP等。
0

在最简单的系统中,您可以使用基于UDP的RTP上的语音数据包。

但是,您无法关闭音频,并且必须事先知道IP地址,端口号,编解码器的类型及其特性。

在过于简单的视图中,SIP是一种方式: 1.从URL中找到另一个端点的IP地址。 (可能需要STUN,TURN,ICE等) 2.同意使用哪个编解码器及其选项

SIP还有很多不同之处,您可能需要根据自己写的内容调查SIP的会议功能。

你可以编写自己的信令协议,如果这是一个学校项目,这将工作得很好。

但是,如果你正在做一个商业项目,请记住,电话还有更多的东西比眼睛还要多。最初的SIP规范经过了大量修改,现在是一组仍在修改和添加的RFC。我建议你利用这项工作而不是重新发明别人所犯的错误。