如何仅使用音频编解码器制作 iOS VOIP/SIP 应用程序 [关闭]

2024-03-10

任何人都可以帮助我消除我的疑虑,我正在尝试实现 SIP 应用程序,我已经设置了 sip 服务器,并且我有我的 sip 帐户的用户名和密码。

现在我尝试使用PJSIP http://www.pjsip.org/ & SIPHON https://code.google.com/p/siphon/但不知何故失败并出现很多错误。 然后我尝试用LinPhone http://www.linphone.org/效果很好。 然后将文件从 LinPhone 项目复制到我的项目中并仍在处理它。 (我还应该在我的项目中复制什么才能开始 - 我已在我的应用程序中复制了 apple-darwin include & lib 文件夹) 我想在应用程序中使用 G711(A 和 u)编解码器,但找不到任何头文件,请问有人可以建议我如何在应用程序中将 G711 编解码器与 LinPhone 库一起使用吗?

另外,谁能告诉我,隐藏没有视频功能的 SIP 应用程序需要多少天? (仅使用 GSM、Speex、G711 编解码器进行音频通话) 在事先不了解任何 SIP 应用程序的情况下,专家和中级开发人员需要多少天才能制作这样的应用程序? (根据你的说法,任何粗略的想法。)

有没有其他好的开源库可以轻松使用来制作这样的应用程序? 或者有什么可用的教程吗? (LinPhone 的文档不符合要求)。

我的方向正确吗?


警告的话

这听起来像是我在试图阻止你进行这项努力。事实并非如此,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 世界充满了这么多损坏的产品,这将对您大有裨益。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅使用音频编解码器制作 iOS VOIP/SIP 应用程序 [关闭] 的相关文章

随机推荐

  • 如何使用 jQuery Deferreds 数组? [复制]

    这个问题在这里已经有答案了 我有一个应用程序 要求按特定顺序加载数据 根 URL 然后是架构 最后使用各种数据对象的架构和 url 来初始化应用程序 当用户浏览应用程序时 数据对象将被加载 根据架构进行验证并显示 当用户对数据进行 CRUD
  • python Flask在html页面上显示图像[重复]

    这个问题在这里已经有答案了 我正在尝试传递图像的文件名并将其渲染在模板上 尽管我传递了实际名称 但它不会显示在页面上 app route methods GET POST app route start methods GET POST d
  • 如果在 runAsync 调用之后链接,那么 thenRunAsync(与 thenRun 相对)是否有任何区别?

    在下面的代码中 调用有什么区别吗thenRunAsync 我应该打电话吗thenRun反而 CompletableFuture runAsync this doWork executorService thenRunAsync this h
  • PHP同名变量

    我正在尝试将我用 PHP 制作的登录系统与 PHPBB 登录系统集成 我的问题是我包含了 PHP 登录文档 其中包含一个名为 user但我的登录系统使用 user以及 例如 我的登录函数在名为 user 的类中执行 而 phpbb 登录类是
  • 推荐的拆分 Maven 项目的解决方案?

    在 Maven 中拆分大型企业项目的最佳方式是什么 很容易理解如何像这样垂直划分事物 你有一个 DAO 项目 DAO 项目是一个依赖项 服务项目 Service 项目是一个依赖项 的网络项目 有没有人对 Maven m 中大型项目的分区 拆
  • 并行异步调用时如何获取最大出站请求?

    通过 Fiddler 分析下面的代码 我意识到使用并行扩展我最多可以获得 2 个出站请求 new string http stackoverflow com http superuser com http serverfault com h
  • 对于密集负载应用程序来说,.Net 4.5 中的 async HttpClient 是一个糟糕的选择吗?

    我最近创建了一个简单的应用程序 用于测试可以以异步方式生成的 HTTP 调用吞吐量与经典多线程方法的比较 该应用程序能够执行预定义数量的 HTTP 调用 并在最后显示执行这些调用所需的总时间 在我的测试期间 所有 HTTP 调用都是对我的本
  • 使用函数而不调用模块[重复]

    这个问题在这里已经有答案了 我将 Canopy 与 Jupyter 笔记本一起使用 我想知道是否有一种方法可以使用模块中的函数而无需调用模块 例如 如果我有 import numpy as np print np sin 2 我希望能够只输
  • 可可移动鼠标

    我正在 Snow Leopard 上编写 Mac OS X 应用程序 我有一个由 NSTimer 定期触发的步骤方法 在这种方法中 我想将鼠标移动到屏幕中央 不按下或释放任何按钮 这是我所拥有的 void step NSTimer time
  • Python 的 os.system() 是否等待进程结束?

    The Python手册 http docs python org library os html os system没有提及是否os system cmd 等待或不等待进程结束 引用手册 在子 shell 中执行命令 字符串 看起来它确实
  • 明天的 Wiki 应包含哪些功能? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 明天的 wiki 应该包含哪些功能 他们如何整合 AJAX 等 Web 2 0 功能 他们目前还缺少哪些其他功能 做什么you想查看您最喜欢的 Wik
  • TextView 上的 OnClick 事件停止 CardView 上的 RippleEffect

    我在 CardView 中有一个 TextView 通过添加 OnClick 事件并添加属性来在 CardView 上启用 Lollipop 的涟漪效果时 android foreground android attr selectable
  • 如何使用FastAPI返回JSON格式的数据?

    我在两者中编写了具有相同功能的相同 API 应用程序FastAPI and Flask 但是 当返回 JSON 时 两个框架之间的数据格式不同 两者使用相同的json库 甚至相同的代码 import json from google clo
  • 为什么 PyLint 会警告没有 __init__ ?

    我们有许多似乎不需要的Python类 init 将它们初始化为空是完全可以接受的 甚至是更好的选择 PyLint 似乎认为这是一件坏事 我是否错过了一些关于为什么没有的见解 init 是难闻的气味吗 或者我应该压制这些警告并克服它 你用这些
  • 如何进行C++对齐数组分配?

    我想修改数组分配 float a new float n 使用对齐的分配器 我倾向于尝试使用placement new 和 posix memalign 或新的 c 11 等效项 但请注意数组的新放置对于数组分配来说是有问题的 https
  • 相机意图/活动 - 避免保存到图库

    我正在使用相机活动捕捉照片 我用MediaStore EXTRA OUTPUT额外参数 图像正确保存到提供的路径 也将其保存到图库文件夹 这样我就可以在 图库 应用程序中查看图像 我可以避免这种情况吗 File file new File
  • 哪些 Git 分支模型适合您?

    我们公司目前正在使用简单的主干 发布 修补程序分支模型 并且希望了解哪些分支模型最适合您的公司或开发流程 工作流程 分支模型 以下是我所看到的三个主要描述 但它们部分相互矛盾 或者不足以解决我们遇到的后续问题 如下所述 因此 我们的团队到目
  • AVAudioRecorder - 正确的 MPEG4 AAC 录制设置

    我有一个实时应用程序 估计有 15 的用户报告记录功能不起作用 我们的测试设备上没有发生这种情况 但报告显示问题在于prepareToRecord 返回 否 我无法找到 AAC 格式的示例设置 我的任何设置是否已关闭 应用程序需要 iOS5
  • 如何将 og:Title og:Image og:Description og:url 信息从 C# 发送到 Facebook

    我的页面上有一个 赞 按钮 单击按钮后 我尝试在 facebook 中发送以下标签信息 以下是我的 赞 按钮框架
  • 如何仅使用音频编解码器制作 iOS VOIP/SIP 应用程序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 任何人都可以帮助我消除我的疑虑 我正在尝试实现 SIP 应用程序 我已经设置了 sip 服务器 并且我有我的 sip 帐户的用户名和密码