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

Building iOS Native App using WebRTC

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

除了看不懂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. 创建 DataChannel
  5. 使用...发送信号在这里解释=link=

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

  7. 使用...

  8. 发送数据...
  9. ...”或类似的东西。

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

几个月前我完成了实施过程。我发现图书馆不稳定 - 有时它工作有时不工作。

此外,我的 iPhone 在使用时总是会变热。

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

这是我的实现,几个月前就可以运行了:

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

祝你好运!

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

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

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

TURN,代表使用中继 NAT 的遍历,提供使用媒体中继服务器的回退 NAT 遍历技术,以促进端点之间的媒体传输。

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

2.Signaling是协调通信的过程。此信令部分需要由您根据需要实施(例如,如果您有 sip 结构,则必须实施 sip 信令)。为了让 WebRTC 应用程序设置 'call',其客户端需要交换信息:

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

    1. 步骤

    要约人:

  • 首先创建peer连接,将ice candidates传进去 作为参数。

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

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

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

回答者:

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

我希望这会澄清你的一些疑虑。