【问题标题】:Building iOS Native App using WebRTC使用 WebRTC 构建 iOS 原生应用
【发布时间】:2015-09-11 09:36:13
【问题描述】:

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

除了我看不懂demo中提供的代码逻辑,我也看不懂:

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. 使用... 发送信号 =link=

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

  6. 使用...发送数据...

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

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

【问题讨论】:

    标签: ios objective-c iphone native webrtc


    【解决方案1】:

    我不是 webrtc 方面的专家,但我会尝试解释您的一些问题。

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

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

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

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

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

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

      1. 步骤

      对于报价人:

    • 首先创建对等连接并将候选冰传递给它 作为参数。

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

      • onicecandidate--onicecandidate 返回本地生成的 ICE 候选者,以便您可以将它们传递给其他对等方,即 STUN/TURN 服务器返回的候选者列表;这些候选冰包含您的公共 ipv4/ipv6 地址以及 UDP 随机地址
      • onaddstream--onaddstream 返回远程流(您朋友的麦克风和相机!)。
        • addStream` 为其他对等方附加您的本地麦克风和摄像头。

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

    答题者:

    • setRemoteDescription
    • 创建答案
    • setLocalDescription
    • oniceCandidate--关于获取本地生成的 ICE
    • addiceCandidate--获取其他对等方发送的 ICE
    • onaddstream--用于添加远程流

    我希望这会让你的一些疑问清楚。

    【讨论】:

      【解决方案2】:

      我在几个月前完成了实施它的过程。我发现这个库不稳定——有时它工作有时不工作。

      另外,我的 iPhone 在使用时总是很热。

      我不建议将此库和整体 WebRTC 技术用于商业项目。

      这是我的实现,几个月前就开始工作了:

      https://github.com/aolszak/WebRTC-iOS

      祝你好运!

      【讨论】:

      • 谢谢!在模拟器上构建失败,但我在设备上成功运行。它与演示应用程序使用的功能相同(连接到房间)吗?你能澄清一下关于我自己的 iOS p2p 聊天应用程序的 ICE/TURN/STUN 服务器的时刻吗? “1)我的 iOS 应用程序的 ICE 服务器是什么?我应该照顾它吗?它是服务器端的东西吗?我应该自己编码和运行它,还是可以使用现有的 Parse 背景?2)iOS 应用程序中的信号机制是什么? 它只是客户端,还是必须在服务器端实现?谢谢。
      • 嘿,Artur Olszak,这是一个很棒的演示,但我想实现一对一的视频/音频通话,比如 whatsapp 和 facebook?你会采取什么方法来做到这一点?你建议我怎么做?请检查此stackoverflow.com/questions/48238295/…
      • 给出错误 -> ld: library not found for -lstdc++.6 clang: error: linker command failed with exit code 1 (use -v to see invocation)
      猜你喜欢
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 2016-03-19
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多