如何使用audio编解码器的iOS VOIP / SIP应用程序

任何人可以帮我清除我的疑惑,我正在尝试实施一个SIP应用程序,我已经有SIP服务器设置,我有我的SIP帐户的用户名和密码。

现在我尝试使用PJSIP和SIPHON,但不知何故失败了很多错误。 然后我尝试了LinPhone ,它工作正常。 然后将LinPhone项目中的文件复制到我的项目中,然后继续工作。 (还有什么我应该复制在我的项目中去 – 我已经复制了苹果达尔文包括&lib文件夹在我的应用程序)我想在应用程序中使用G711(A和U)编解码器,我找不到头文件的,请任何人可以build议我如何使用我的应用程序中的LinPhone库的G711编解码器?

也有人可以告诉我,在没有videofunction的情况下,掩盖SIP应用需要多less天? (仅限于GSM,Speex,G711编解码器的audio呼叫)在没有任何SIP应用知识的情况下,将需要多less天的时间和专家和中级开发人员才能制作出这样的应用? (根据你的任何粗糙的想法。)

是否有任何其他良好的开源库可以轻松地使用这样的应用程序? 或任何types的教程可用? (LinPhone的文档不符合标准)。

我正朝着正确的方向走吗?

警告字

这可能听起来像我试图劝阻你不要这样做。 SIP(远程协议)是一个有趣的协议,可以协同工作(最终),看到所有协议都是非常有意义的。 得到这样一个野兽的工作,你会很满意,祝你好运,把它塑造成你的意志! 然而,准备:SIP是一个令人沮丧的野兽合作。

下面的时间表是基于我自己的经验,但由于你们中有两个人,我缩短了时间表。 我们的开发周期持续了近一年,但是我既是项目的领导者,也是项目的程序员,那时候包括在UI上完成的所有工作,需求协调,计划,文档等。

第1和2周

SIP是一个复杂的规范,有很多扩展和特点,特别是与防火墙,转发,分支和join有关。 我build议你开始查找RFC,并且花费大量的时间来读取信号规范,以及任何你的应用程序需要的扩展,至less包括基本规范,SDP规范和ICE协议规范。

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

打破协议分析器(Wireshark等),看看你有什么应用程序正在做的电线。 阅读规格后,您现在可以了解为什么各种SIP产品难以相互发挥作用,以及如何开始在自己的应用程序上工作的想法。

第3-6周

即使有一个体面的工具包,你也会在一个月的时间里花更多的时间让SIP能够可靠地做你想要的信息,并写出所需的基础设施来响应SIP信号。 有一些疯狂的边缘案例,在并发处理中你可以想到的每一个陷阱现在都被放大了,因为你有三个独立的代理,其中一些代理将有非常高的延迟,不可靠的networking连接,都试图协调关于同一笔交易。

不要采取快捷方式,编码,testing,更多的代码,寻找故障和边缘情况,并继续前进。 RFC可以帮助你理解你遇到的问题,但是其中的一些只需要勉勉强强。

第7和8周

根据您的应用程序的要求,仅build立最终用户代理之间的基础连接将正确地占用您的大部分努力来创build可靠的产品。 在你们之间,你们可能会在接下来的几个星期里第一次让这部分工作,并且可能会在应用程序的其他开发周期中诊断边缘条件。 请记住,这里需要媒体代理的边缘案例,以及用户严重受到防火墙限制,无法完成的非赢利边缘案例。 不要忘记处理它们。

第9-11周

此时,根据您的经验和networking知识,您的手机应该(相当)可靠地互相连接,并且也要通过相当严格的防火墙进行连接。 先决条件规范是非常有用的减less感知延迟在这里,因为你可以暂缓振铃,直到networking层已经连接。 我的经验不会很好地告诉下一层(协议),就像Java一样,媒体编码和解码是在银盘上交给我的,除了我自己必须做的quicktime。 我会花一两个星期才能使协议正常工作,并通过SDP可靠地传递协议信息,但这可能是我的一个非常乐观的估计。

再加上一周,如果你以前从来没有使用过RTP / RTCP的话,那么他们并不是很复杂,正确地回应你从RTCP得到的反馈可能是有挑战性的,而且有些黑暗的艺术,尽pipe很关键以确保最佳的networking利用率和媒体质量。

第12周

可能的话,在这一点上,你会意识到你想要连接的一个或者另一个SIP产品,不喜欢你的实现,有时由于完全不可理解的原因。 如果您需要支持挑剔的产品,您将花费接下来的几个星期到一个月的时间来诊断原因。 如果你的产品是专有的,你可能不关心这一步,但它也是一个双重检查你的规范是多么严重的方法。 (我们都这样做,所以不要以为你使用的testing产品是正确的!总是仔细检查!)

额外

请记住,以上内容主要是为了估计需要花费多长时间才能获得一个基于SIP / SDP / ICE的良好解决scheme,而不是使用这种基础设施的应用程序。 UX是iOS世界的王者,因此请确保您的应用程序具有吸引力,并花费很多时间才能正确使用。

即使您使用库来简化编码,请了解底层协议! 理解为什么事情会按照自己的方式工作,以及为什么SIP世界充满了这么多破碎的产品将会使你受益匪浅。