使用 WebRTC 构建 iOS 本机应用程序

2024-05-22

我找了4天了,还是没找到。我构建了所有库并将其集成到我的自定义项目中,但我不知道应该采取哪些步骤才能使其正常工作。我在代码示例\解释中发现的唯一内容是 tech.appear.in/2015/05/25/Getting-started-with-WebRTC-on-iOS ,但对我来说它很差而且不清楚,AppRTCDemo源代码也是如此。我读到了关于浏览器的 WebRTC,但仍然无法在 iOS 上重现它。 任何人都可以解释或提供有关如何使用 WebRTC API 完全构建 iOS 本机应用程序(例如 p2p ios 聊天)的解释链接吗?

除了我不理解演示中提供的代码逻辑之外,我无法理解:

1) 我的 iOS 应用程序的 ICE 服务器是什么?我应该照顾它吗?是服务器端的东西吗?我应该自己编码并运行它,还是可以使用现有的 Parse 背景?

2)iOS应用程序中的信号机制是什么?是仅在客户端实现,还是也必须在服务器端实现?

3)也许有人可以解释分步指南,也许用一些代码,如何使用 WebRTC 实现简单的 iOS p2p 聊天?例如:

“你必须:

  1. 使用此 =source= 和本教程 =tutorial= 在解析核心上创建 ICE/STUN/TURN 服务器。

  2. 使用创建的 ICEServer 创建 RTCPeerConnection:RTCPeerConnectionFactory *pcFactory = [[RTCPeerConnectionFactory alloc] init]; RTCPeerConnection *peerConnection = [pcFactory peerConnectionWithICEServers:kICEServerURL constraints:nil delegate:self];

  3. 使用创建数据通道...

  4. 发送信号使用...这里解释=链接=

  5. 设置本地和远程描述...

  6. 发送数据... using ...

  7. ...”或类似的东西。

我很抱歉问这个问题,但我正在失去理智试图弄清楚。谢谢你!


我不是 webrtc 方面的专家,但我会尽力解释你的一些问题。

1.ICE 服务器——NAT 和防火墙在设置 IP 端点时带来了重大问题。因此IETF标准STUN、TURN和ICE被制定来解决NAT穿越问题。 STUN 帮助连接 IP 端点:

  • 发现它们是否位于 NAT/防火墙后面,如果是,
  • 确定防火墙的公共 IP 地址和类型。然后 STUN 使用此信息来协助建立点对点 IP 连接。

TURN 代表使用中继 NAT 遍历,它提供了一种使用媒体中继服务器的后备 NAT 遍历技术,以促进端点之间的媒体传输。

ICE 是一个利用 STUN 和 TURN 提供可靠的 IP 设置和媒体传输的框架,通过 SIP 提供/应答模型为端点交换多个候选 IP 地址和端口(例如私有地址和 TURN 服务器地址) 。

2.信令是协调通信的过程。这个信令部分需要由您根据您的需要来实现(例如,如果您有 sip 结构,那么您将必须实现 sip 信令)。为了让 WebRTC 应用程序建立“呼叫”,其客户端需要交换信息:

  • 用于打开或关闭通信的会话控制消息。
  • 错误消息。
  • 媒体元数据,例如编解码器和编解码器设置、带宽和媒体类型。
  • 关键数据,用于建立安全连接。
  • 网络数据,例如外界看到的主机的 IP 地址和端口。

    1. Steps

    对于报价者:

  • 首先创建对等连接并将ice Candidates传递到其中 作为参数。

  • 为三个事件设置事件处理程序:

    • onicecandidate——onicecandidate 返回本地生成的 ICE 候选,以便您可以将它们传递给其他对等点,即 STUN/TURN 服务器返回的ice候选列表;这些ice候选包含您的公共ipv4/ipv6地址以及UDP随机地址
    • onaddstream--onaddstream returns remote stream (microphone and camera of your friend!).
      • addStream` 为其他对等点连接您的本地麦克风和摄像头。

现在通过调用 setLocalDescription 函数创建 SDP Offer,并通过调用 setRemoteDescription 函数设置远程 SDP。

对于回答者:

  • 设置远程描述
  • 创建答案
  • 设置本地描述
  • oniceCandidate--关于获取本地生成的 ICE
  • addiceCandidate--获取其他peer发送的ICE
  • onaddstream--用于远程添加流

我希望这能够消除您的一些疑虑。

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

使用 WebRTC 构建 iOS 本机应用程序 的相关文章

随机推荐

  • 如何让 TypeScript 从 node_modules 捆绑第 3 方库?

    我想要使 用 TypeScript 编译器node modules firebase firebase d ts检查我的代码并捆绑node modules firebase firebase js到我从 firebase 导入内容的一些文件
  • 将多个 Future[Seq] 连接成一个 Future[Seq]

    如果没有 Future 这就是我将所有较小的 Seq 组合成一个大 Seq 的方式flatmap category getCategoryUrlKey id Int Seq Meta main method val appDomains S
  • Python for ios解释器[重复]

    这个问题在这里已经有答案了 可能的重复 iOS 上的 Python 或 Ruby 解释器 https stackoverflow com questions 4772591 python or ruby interpreter on ios
  • 实体类型处于“影子状态”意味着什么?

    在我的 ASP NET Core 1 0 MVC6 EF7 Web 应用程序中 我添加了一个迁移 该迁移添加了新的相关表 和相应的模型 我有以下模型快照 DbContext typeof ApplicationDbContext parti
  • nginx上传client_max_body_size问题

    我正在运行 nginx ruby on rails 并且有一个简单的多部分表单来上传文件 一切正常 直到我决定限制要上传的文件的最大大小 为此 我设置了 nginxclient max body size to 1m 1MB 并且当该规则被
  • 如何诊断和修复 git fatal: 无法读取树

    我在用着git管理项目上的文件 并不断遇到这个问题 当我跑步时git status我收到消息 fatal unable to read tree e2d920161d41631066945a3cbcd1b043de919570 据我了解 我
  • 检查SQS队列是否为空的有效方法

    我有一个SQS Queue多个主机从中读取消息 我想在处理队列中的所有消息后运行一些作业 业务逻辑 如何检查队列是否为空 是的 我可以检查ApproximateNumberOfMessages and ApproximateNumberOf
  • 比较 jdbc 中的结果集

    在我的java代码中 我获得了两个结果集rs1和rs2 如下所示 rs1 statement executeQuery select from tableA rs2 statement executeQuery select from ta
  • 如何使用 C# 了解 Excel 中的分页符 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 C 创建并格式化 Excel 电子表格 因此我需要格式化 合并单元格 更改字体等 直到第一页的最后 如何知道 Excel 电子
  • 关于*多键*外连接的默认/填充值

    注意 下面的帖子是 多键 对应的先前的问题 https stackoverflow com q 39748976 559827我的 先前问题的解决方案仅适用于连接位于单个键上的情况 并且我不清楚如何将这些解决方案推广到下面介绍的多键情况 因
  • 具有默认值artifactID的Maven原型属性

    我想创建一个使用要创建的参数的原型 坚果我不知道以这种方式创建的参数是否正确
  • 多次调用方法的 Python Mock 对象

    我正在测试一个类 它具有另一个类的依赖项 该类的实例被传递给 CUT 的 init 方法 我想使用 Python Mock 库来模拟这个类 我所拥有的是这样的 mockobj Mock spec MyDependencyClass mock
  • 使用 CSS 的样式选择选项

    我正在尝试使用 CSS 设置选择选项列表的样式 我希望列表的时间之间有更多的填充 因为它们似乎被压在一起 我尝试向选项元素添加填充 但这似乎不起作用 有任何想法吗 这是我的代码 HTML
  • 如何将 .env 文件变量传递给 webpack 配置?

    我是 webpack 的新手 几乎完成了所有构建部分 但现在的问题是我想将环境变量从 env 文件传递 到 webpack 配置 以便我可以通过以下方式将该变量传递到我的构建文件webpack DefinePlugin plugin 目前我
  • 更新 Visual Studio 2017 15.6.2 时出错

    我试图将 VS 2017 更新到 15 6 2 版本 像往常一样 VS 要求我更新安装程序 但是安装程序更新失败 现在 当我尝试再次启动 VS 更新时 收到以下错误消息 加载 vs installershell exe 时出错 主题中不存在
  • 如何从 data.frame 中删除列?

    不是 你怎么 但更多的是 你怎么 如果有人给你一个包含 200 列的文件 并且你想将其减少到分析所需的少数列 你会如何做呢 一种解决方案是否比另一种解决方案更有优势 假设我们有一个包含列 col1 col2 到 col200 的数据框 如果
  • R 中的“右”滚动平均值和“左”滚动平均值是什么?

    如果我想计算之前的n意味着年份滞后于当年 我将如何实现这一点 它像 右 滚动平均窗口一样简单吗 或者它是一个 左 滚动平均窗口 我不确定这里使用哪个窗口 样本数据 set seed 1234 dat lt data frame year c
  • 如何衡量字符串的复杂度?

    我有一些长字符串 1 000 000 个字符 每个字符串仅包含定义字母表中的符号 例如 A 1 2 3 示例字符串 string S1 1111111111 meta complexity 0 string S2 1111222333 me
  • JSF Maven Mojarra 实施

    我尝试使用 JSF Eclipse 和 Maven 创建简单的项目 我用了
  • 使用 WebRTC 构建 iOS 本机应用程序

    我找了4天了 还是没找到 我构建了所有库并将其集成到我的自定义项目中 但我不知道应该采取哪些步骤才能使其正常工作 我在代码示例 解释中发现的唯一内容是 tech appear in 2015 05 25 Getting started wi