如何仅使用音频编解码器制作 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 应用程序 [关闭] 的相关文章

  • ios - ARKit - 如何创建旋转对象手势功能?

    我是 ARKit 新手 我想创建一个旋转对象的函数 这是我关于拖动和旋转对象的代码 Rotate object objc func rotateRecognized sender UIPanGestureRecognizer let sce
  • iOS 以编程方式撤销位置服务权限

    有没有一个功能CLLocationManager or UIApplication撤销位置权限类似功能unregisterForRemoteNotifications撤销推送通知权限 The stopUpdatingLocationCLLo
  • 在 UILongPressGestureRecognizer 上,如何检测哪个对象生成了事件?

    我有几个 UIButton 的视图 我已成功使用 UILongPressGestureRecognizer 实现 并使用以下内容作为选择器 void longPress UILongPressGestureRecognizer gestur
  • 当将 contentMode 设置为 UIViewContentModeScaleAspectFit 时,如何设置 UIImageView 左对齐或右对齐?

    我想在使用时控制图像对齐UIViewContentModeScaleAspectFit in UIImageView 例如 我有两个UIImageView在上述的一个视图中 这两个UIImageView的内容模式是UIViewContent
  • 如何在 python 中生成音符或和弦?

    有人能给我指出一个在 python 2 7 中生成音符和和弦的好库吗 我查看了 PythonInfoWiki 但运气不佳 PyAudio 只是崩溃了 似乎没有其他东西可以生成音调 我不知道这是否有帮助 但这里有一些代码可以根据给定的频率和振
  • 为什么使用自动布局时视图的框架宽度始终为 600 x 600

    我正在制作一个基本的扫雷应用程序 用于快速练习 娱乐 我想让板的尺寸 10 个图块宽 适应任何 iOS 屏幕 为此 我通过获取tileContainer view frame width和 10来设置每个图块的大小 我的问题是 tileCo
  • iOS中拖动时如何修改UIVisualEffectView的模糊度?

    目前 我正在使用 UIVisualEffectView 对图像应用模糊 我有一个 UIScrollView 当我在 scrollViewDidScroll 方法中向下拉滚动视图时 我正在更改 UIVisualEffectView 的 alp
  • XcodeColors 在 XCode 5 中不起作用

    我尝试安装XcodeColors在 XCode 5 中 但不幸的是 它不能与我从 XCode 4 6 获得的旧插件一起使用 下一步 我检查了 github 网站 在那里我看到了以下拉取请求 提供了 XCode 5 的工作版本 https g
  • 多次显示admob插页式广告怎么办?

    我有一个小型游戏应用程序 它有一个故事板 里面创建了像开始菜单 游戏区域 分数这样的场景 我在其中添加了 admob 横幅视图和插页式广告 我的横幅视图工作正常 但我的插页式广告只能工作一次 我在 viewdidload 上加载插页式广告
  • NSURLSessionDownloadTask 出现存储几乎已满磁盘警告的问题

    我在使用 NSURLSessionDownloadTask 处理 ios 上的 空间不足 磁盘已满 错误时遇到问题 如果由于应用程序中完成下载而导致磁盘已满 我会接到电话 URLSession 会话 NSURLSession 任务 NSUR
  • 在当前参数寄存器中找到的选择器名称:isEqual:

    我正在寻求一些帮助来消除 OSX 应用程序中的一个我无法解决的错误 我收到以下记录错误 Selector name found in current argument registers isEqual 但我一生都无法弄清楚它来自哪里 因为
  • 如何命名一段代码并在不同的方法中调用它?

    我使用 Grand Central Dispatch 方法在队列中执行我的应用程序 我在该队列的计算中决定按钮的框架 我希望我的应用程序重新绘制其屏幕并计算旋转后的新帧 这是我所做的一些伪代码解释 CGFloat a 123 b 24 di
  • 推送通知需要很长时间才能到达

    我在适用于 iOS 和 Android 的 Adob e Air 应用程序中遇到推送通知的奇怪问题 我正在使用 Milkman Games 的 Easy Push ANE 以及 One Signal 服务 问题是通知确实会到达 但有时 随机
  • Swift 中的自定义输入视图

    我花了几个小时试图弄清楚如何创建 然后定制inputView上班 我有一个网格TextInputs 想想拼字板 按下时应该加载自定义inputView插入文本 我创建了一个 xib文件包含UI elements为定制inputView 我能
  • 如何在 Swift 编程中获得基于导航的模板功能

    我的项目需要一个导航控制器 并且我的应用程序最初有一个社交登录 一旦验证通过 用户将被推送到另一个视图 我在其中显示一个具有 2 个选项卡的选项卡控制器 我不知道如何在 Swift 编程中做到这一点 我已将视图控制器嵌入到导航控制器中 一旦
  • 如何为 Mac OS X 制作可拖动的菜单栏图标

    我正在为我正在开发的应用程序编写菜单栏图标 但是 NSStatusBar 类没有可以通过 cmd 鼠标左键拖动来使图标可拖动的方法 如何使用 Objective C 代码使菜单栏图标可拖动 谢谢 目前您无法使用 NSStatusBar 来完
  • Swift 中的 AURenderCallback

    我正在创建一个使用音频单元的应用程序 虽然 Objective C 中有很多代码示例 包括 Apple 自己的 aurioTouch 等 但我正在尝试用 Swift 编写整个代码 我已经能够设置我的 AUGraph 并通过它运行一些音频 但
  • 如何获取 ios 日期数组中的所有星期日

    我只想要一个数组 它以 NSDate 的形式包含一年中的所有星期一 但速度很快 我在 Objective c 中使用以下代码 但不知道如何在 swift 中使用它 NSDate pickerDate NSDate date NSLog pi
  • 在 swift 中从本地视频创建缩略图

    如何从本地视频文件快速创建缩略图 例如 如果视频文件路径位于此处 file Users Dev Library Developer CoreSimulator Devices F33222DF D8F0 448B A127 C5B03C64
  • 在 Objective-C 中,逗号用作语句分隔符时有什么作用?

    我正在查看第三方的一些源代码 并且反复看到对我来说新的语法 基本上他们用逗号而不是分号分隔语句 它可以编译并运行 但我不明白它在做什么 看起来是这样 if url url release url nil 有时他们也会在不使用 if 的情况下

随机推荐

  • 如何使用 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 帐户的用户名和密码