6

谁能帮我解决我正在尝试实现 SIP 应用程序的疑虑,我已经设置了 sip 服务器,并且我有我的 sip 帐户的用户名和密码。

现在我尝试使用PJSIP & SIPHON但不知何故失败了很多错误。然后我尝试使用LinPhone,它运行良好。然后将 LinPhone 项目中的文件复制到我的项目中,并且仍在处理它。(我还应该在我的项目中复制什么才能开始 - 我已经在我的应用程序中复制了 apple-darwin include & lib 文件夹)我想在应用程序中使用 G711(A 和 u)编解码器,但我找不到任何头文件,请任何人建议我如何在我的应用程序中将 G711 编解码器与 LinPhone 库一起使用?

还有谁能告诉我,掩盖没有视频功能的 SIP 应用程序需要多少天?(使用 GSM、Speex、G711 编解码器的音频通话 - 仅限)在没有任何 SIP 应用程序的先验知识的情况下,专家和中级开发人员将需要多少天来制作这样的应用程序?(根据您的任何粗略想法。)

是否有任何其他好的开源库可以轻松使用来制作这样的应用程序?或者任何可用的教程?(LinPhone 的文档不合格)。

我朝着正确的方向前进吗?

4

1 回答 1

14

警告语

这听起来像是我试图劝阻你不要说服这个努力。远非如此,SIP 是一个有趣的协议(最终),看到它们融合在一起是非常有益的。让这样的野兽开始工作,你会感到非常满意,我祝你好运,按照你的意愿塑造它!但是,请做好准备:SIP 是一种令人沮丧的野兽。

以下时间线是基于我自己的经验,但由于你们有两个,我已经稍微缩短了时间线。我们的开发周期持续了近一年,但我既是项目的负责人,也是唯一的程序员,那段时间包括在 UI、需求协调、规划、文档等方面完成的所有工作。

第 1 周和第 2 周

SIP 是一个复杂的规范,具有许多扩展和特性,特别是与防火墙、转发、分支和加入有关。我建议您开始查找 RFC,并花大量时间阅读信令规范以及您的应用程序所需的任何扩展,至少包括基本规范、SDP 规范和 ICE 协议规格。

如果你做对了,那应该会占用大约一周的时间,而且是全职的。在第 2 周,考虑您需要哪些扩展规范(存在指示、前提条件、会议、GRUU 等)并花时间阅读这些规范。相互钻研,这是很多信息,而且它们之间的相互关系相对复杂。

分解协议分析器(Wireshark 等),看看你有什么应用程序在网上做什么。阅读规范后,您现在可以很好地理解为什么各种 SIP 产品难以相互配合,以及如何开始开发自己的应用程序的想法。

第 3-6 周

即使有一个不错的工具包,您也将花费一个月的大部分时间让 SIP 可靠地完成您希望它在通信信令信息和编写响应 SIP 信号所需的基础设施方面所做的事情。有大量的边缘情况,您可以想象的并发处理中的每个陷阱现在都被您拥有三个独立代理的事实放大了,其中一些代理将具有非常高的延迟,不可靠的网络连接,所有这些都试图协调关于同一笔交易。

不要走捷径,编写代码,测试,编写更多代码,寻找错误和边缘情况,然后继续前进。RFC 对理解您将遇到的问题有很大帮助,但其中一些只是必须经过艰苦的努力。

第 7 周和第 8 周

根据您的应用程序的要求,仅在最终用户代理之间建立底层连接将正确地占用您创建可靠产品的大部分工作。在你们两人之间,您可能会在接下来的几周内让这部分第一次工作,并且可能会花费无数小时在应用程序的其余开发周期中诊断边缘条件。请记住,这里有需要媒体代理的边缘情况,以及用户被严重防火墙以致无能为力的非胜利边缘情况。不要忘记处理它们。

第 9-11 周

此时,根据您的经验和网络知识,您的手机也应该(相当)可靠地通过相当严格的防火墙相互连接。前提条件规范对于减少此处的感知延迟非常有用,因为您可以推迟振铃,直到网络层已经连接。我的经验不会很好地通知下一层(协议),就像 Java 一样,媒体编码和解码是在一个银盘上交给我的,除了我必须自己做的 quicktime。我会花一两周时间让协议正常工作,并通过 SDP 可靠地传达协议信息,但这对我来说可能是一个非常乐观的估计。

如果您以前从未使用过 RTP/RTCP,请再增加一周,因为虽然它们本身并不复杂,但正确响应您从 RTCP 获得的反馈可能具有挑战性,并且在某种程度上是一门黑暗的艺术,尽管非常关键以确保最佳的网络利用率和媒体质量。

第 12 周以上

在这一点上,您可能会意识到您希望能够连接的一个或另一个 SIP 产品不喜欢您的实施,有时原因完全无法解释。如果您需要支持挑剔的产品,您将花费接下来的几周到一个月的时间来诊断原因。如果你的产品是专有的,你可能不关心这一步,但这也是一种双重检查你对规范的破坏程度的方法。(我们都这样做,所以也不要假设您使用的测试产品是正确的!请务必仔细检查!)

额外的

请记住,以上内容主要是估计需要多长时间才能使编写良好的基于​​ SIP/SDP/ICE 的解决方案正常运行,而不是使用此类基础设施的应用程序。UX 是 iOS 世界的王者,因此请确保您的应用程序引人注目,并花费大量时间使其正确。

即使 您使用库来简化编码,也要学习底层协议!理解为什么事情会以它们的方式工作,以及为什么 SIP 世界充满了如此多的损坏产品,这将使您受益匪浅。

于 2013-09-04T09:02:45.970 回答