任何人都可以帮助我解决我的疑问,我正在尝试实施SIP应用程序,我已经有sip服务器设置,我有我的sip帐户的用户名和密码。
现在我尝试使用PJSIP& SIPHON但不知何故失败了很多错误。 然后我尝试使用LinPhone并且工作正常。 然后将LinPhone项目中的文件复制到我的项目中,并继续处理它。 (我还应该在项目中复制什么才能开始 - 我在我的应用程序中复制了apple-darwin include& lib文件夹) 我想在应用程序中使用G711(A和u)编解码器,我找不到任何头文件,请任何人建议我如何在我的应用程序中使用G711编解码器和LinPhone库?
也可以告诉我,在没有视频功能的情况下掩盖SIP应用需要多少天? (仅限GSM,Speex,G711编解码器的音频通话) 多少天会和专家&中级开发人员将在没有任何SIP应用程序的任何先验知识的情况下制作这样的应用程序? (根据你的任何粗略想法。)
有没有其他好的开源库可供轻松使用来制作这样的应用程序? 或者任何类型的教程可用? (LinPhone的文档不符合标准)。
我正朝着正确的方向前进吗?
答案 0 :(得分: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世界充满了这么多破碎的产品,这将使您受益匪浅。