警告的话
这听起来像是我在试图阻止你进行这项努力。事实并非如此,SIP 是一个(最终)使用起来很有趣的协议,看到这一切结合在一起是非常值得的。当你让这样一个野兽工作时,你会感到非常满足,我祝你在按照你的意愿塑造它时好运!然而,请做好准备:SIP 是一个令人沮丧的野兽。
以下时间表是基于我自己的经验,尽管由于你们两个人,我稍微缩短了时间表。我们的开发周期持续了近一年,但我既是该项目的领导者,也是唯一的程序员,这段时间包括在 UI、需求协调、规划、文档等方面完成的所有工作。
第一周和第二周
SIP 是一个复杂的规范,具有许多扩展和特性,特别是与防火墙、转发、分支和加入相关。我建议您开始查找 RFC,并花大量时间阅读信令规范以及应用程序所需的任何扩展,至少包括基本规范、SDP 规范和 ICE 协议规格。
如果你做得正确的话,这应该需要大约一周的时间,而且是全职。在第 2 周,考虑您需要哪些扩展规范(存在指示、先决条件、会议、GRUU 等),并花时间阅读这些规范。相互钻研,这是很多信息,而且就它们之间的相互关系而言,相对复杂。
打开协议分析器(Wireshark 等)并查看您的应用程序正在网上做什么。阅读规范后,您现在可以很好地理解为什么各种 SIP 产品难以相互兼容,并且了解如何开始开发自己的应用程序。
Week 3-6
即使有一个像样的工具包,您也将花费一个月的大部分时间让 SIP 可靠地完成您想要的功能,即通信信令信息,并编写所需的基础设施来响应 SIP 信号。存在大量的边缘情况,并且您在并发处理中可以想象到的每个陷阱现在都因您拥有三个独立的代理而被放大,其中一些代理将具有非常高的延迟,不可靠的网络连接,所有代理都试图协调关于同一笔交易。
不要走捷径,编码、测试、编码更多,寻找错误和边缘情况,然后继续。 RFC 对于理解您将遇到的问题有很大帮助,但其中一些问题需要您费力地解决。
第 7 周和第 8 周
根据您的应用程序的要求,仅在最终用户代理之间建立底层连接就将花费您创建可靠产品的大部分精力。你们两人可能会在接下来的几周内让这部分首次工作,并且可能会花费无数的时间在应用程序的开发周期的其余部分中诊断边缘条件。请记住,这里存在需要媒体代理的边缘情况,以及用户的防火墙非常严重而无能为力的无赢边缘情况。不要忘记处理它们。
第 9-11 周
此时,根据您的经验和网络知识,您的手机应该(相当)可靠地相互连接,并且还可以通过相当严格的防火墙。前提条件规范对于减少感知延迟非常有用,因为您可以推迟振铃,直到网络层已经连接。我的经验并不能很好地指导下一层(协议),就像 Java 一样,媒体编码和解码都是轻而易举地交给我的,除了 Quicktime,我必须自己做。我会花费一两周的时间来让协议正常工作,并通过 SDP 可靠地传达协议信息,但这对我来说可能是一个非常乐观的估计。
如果您以前从未使用过 RTP/RTCP,则再增加一周,因为虽然它们本身并不复杂,但正确响应从 RTCP 获得的反馈可能具有挑战性,并且在某种程度上是一门黑暗艺术,尽管非常关键确保最佳的网络利用率和媒体质量。
Week 12+
此时,您可能会意识到您想要连接的一个或另一个 SIP 产品不喜欢您的实施,有时出于完全无法解释的原因。如果您需要支持挑剔的产品,您将花费接下来的几周到一个月的时间来诊断原因。如果您的产品是专有的,您可能不关心这一步,但这也是仔细检查您对规范的破坏程度的一种方法。 (我们都这样做,所以也不要假设您使用的测试产品是正确的!始终仔细检查!)
额外的
请记住,上述内容主要是为了估计一个编写良好的基于 SIP/SDP/ICE 的解决方案正常运行需要多长时间,而不是使用此类基础设施的应用程序。用户体验是 iOS 世界中的王者,因此请确保您的应用程序引人注目,并花费大量时间来确保它正确。
Even if您使用库使编码更容易,学习底层协议!了解为什么事情会这样运作,以及为什么 SIP 世界充满了这么多损坏的产品,这将对您大有裨益。