向 iOS 应用程序添加直播音频和视频通话体验可能会让人望而生畏。主要原因是对于骨干或底层技术,需要考虑几个因素。将实时媒体嵌入 iOS 应用程序的一种方法是使用 Web 实时通信 (WebRTC)。在本文中,您将了解 WebRTC 的工作原理以及如何将它集成到您的下一个 iOS 应用程序中。它演示了如何与 WebRTC 和任何 Swift/iOS 项目建立点对点连接。
什么是 WebRTC?
WebRTC 是 Google 于 2011 年推出的开源API。WebRTC 协议为 Web 和本机移动应用程序提供低延迟、安全、点对点和实时通信。使用 WebRTC,用户可以交流、共享和接收音频、点对点数据、视频和其他媒体类型。
WebRTC API Demos
WebRTC 使用以下 API 通过连接的通道获取、通信和发送。尝试、测试和演示这些 WebRTC 通信 API 的最佳场所之一是在浏览器中使用这些视频聊天演示。本节中的 WebRTC 演示适用于桌面和移动浏览器,例如 Chrome、Safari、Firefox、Opera 和 Edge。这些示例来自 Google 在网络上的本地和远程WebRTC 示例。在浏览器中测试后,您将大致了解该技术的工作原理以及可以使用它实现的目标。
- 媒体流获取用户媒体: webRTC 获取用户媒体 API 帮助应用程序访问媒体设备(计算机和智能手机)的摄像头和麦克风。API 的获取用户媒体方法要求用户授予使用麦克风或摄像头的权限。此外,它还同步摄像头和麦克风输入(音频和视频)。使用上面的链接在 Web 浏览器中查看并试验下面的视频,以了解“获取用户媒体”API 的工作原理。
- 媒体记录器 API:媒体记录器 API 为 WebRTC 应用程序提供了一种简单的方法来记录不同用例的内容。它的工作原理如下。当你想使用某个应用程序进行录音时,该应用程序将启动媒体记录器对象以开始录音。然后它将调用停止方法来结束录制。录制的内容/媒体将以媒体记录器的默认编码提供。
- 使用 WebRTC RTCPeerConnection进行点对点通信:标准 API 使用户能够在设备之间流式传输音频和视频。例如,两个用户之间的音视频通话。它还处理带宽管理和数据加密。在这个API demo中,网页在同一页面显示调用者和被调用者。
- 与 WebRTC 数据通道的实时通信
实时通信数据通道RTCDataChannel API 支持通过双向对等连接流式传输和交换任意数据。下面的示例说明了如何使用 WebRTC 数据通道发送消息。本地连接对象允许您启动并输入一些要发送的文本。发送文本后,远程连接对象将接收到它。通过对等连接进行的数据传输和文件传输是 RTDataChannel 的其他示例。
WebRTC 用例
WebRTC 有几个用例。以下是您可以在 iOS 上使用 WebRTC 的区域集合。
- 音频室:纯音频聊天和录音
- 文字和视频聊天
- 音视频会议
- 屏幕录制和分享
- 文件共享
- 在线多人游戏流媒体
了解信令和协商
要构建真实世界的 WebRTC 应用程序,您需要服务器来管理设备之间的连接。WebRTC 服务器使 WebRTC 对等方能够相互识别并共享有关其网络的信息。因此,最终用户可以发送和接收不同格式的媒体。WebRTC 的服务器端由四个主要组件组成。这些是信令、网络地址转换 (NAT) 网关遍历、用户发现和中继服务器(用于对等通信中的故障)。本文仅涵盖 WebRTC 的信令服务器组件。
在 WebRTC 中用于建立、协调和控制通信的机制称为信令。RTCPeerConnection或 WebRTC 没有定义信令协议。因此,开发人员可以选择他们喜欢使用的信号方法。在发信号期间,其中一个用户发送与另一个用户连接的提议。WebRTC 协商组件将提议请求通知其他用户(设备)。第二个用户可以接受或拒绝第一个用户的提议。当报价被接受时,第一个用户会收到通知。服务器然后在两个用户之间传输信息。最后,连接失败或成功。
通常,应用程序使用 WebRTC 来传输音频、数据和视频。WebRTC 获取用户的 IP 地址、网络信息和端口以交换和传输数据。它还支持通过NAT 网关和防火墙进行流式传输和通信。
假设两个 iOS 设备要一起通信,这两个设备之间必须有一个信令服务器。要在 iOS 设备之间建立点对点连接,您可以使用使用 WebSocket 构建的 Swift 服务器,以便它们可以开始通信和交换数据。在上图中,第一台设备需要向第二台设备发出报价。当第二个设备尝试接听或加入对话时,设备之间将进行协商。最后,两个设备将建立双向连接或失败。下图演示了两个 iOS 设备如何连接。
WebRTC 会话如何工作
使用 WebRTC 进行音频、视频通话和流媒体应用程序之间的通信,必须有显示媒体交换信息的要求。例如,设备的 IP 地址及其会话描述元数据。会话描述协议 (SDP) 处理和管理此类信息。SDP 构成了 WebRTC 工作流程的重要组成部分,因为它提供了有关与 WebRTC 协议的特定通信的所有信息。SDP提供
- 会话的名称
- 会议的目标
- 会话的活跃时间
- 会话的媒体类型(音频或视频)
- 交换数据所需的信息(端口号和 IP 地址)。
假设iPhone1要与iPhone2进行视频通话或音频通话。为了让 iPhone1 发起呼叫报价,它需要将其信息提供给 WebRTC 服务器以进行报价。iPhone2 然后检查报价通知并接受或拒绝它。下图说明了 SDP 的操作。
由于网络地址转换 (NAT),WebRTC 会话不会公开共享通信设备的 IP 地址。每当设备通过 Internet 将数据传输到其他设备时,NAT 都会隐藏设备的 IP 地址。使用 WebRTC 时,需要提供特定 IP 才能与 NAT 网关和防火墙配合使用。您可以使用 Session Traversal Utilities for NAT (STUN) 来实现这一点。STUN 服务器生成并提供公共 IP 地址发送给每个设备进行通信。例如,如果 iPhone1 尝试提供报价,它的 IP 地址将发送到 STUN 服务器。然后 STUN 服务器生成一个公共 IP 地址并将其放入 SDP 以发送给 iPhone2。下图说明了 STUN 服务器的基本操作原理。
WebRTC如何处理稳定高效的通信
管理本地和远程设备之间的RTCPeerConnection
连接并关闭连接。它确保对等点之间的流式数据稳定高效。下面总结了它的作用:
- 显示被叫方(远程设备)是否可以接受通信
- 它指示连接的当前状态。例如,连接、连接和失败。
如何将 WebRTC 与 iOS 应用程序集成
WebRTC 使用点对点连接为 iOS 应用程序启用音频和视频呼叫功能。为实际生产应用程序建立此连接需要信令服务器。服务器负责管理通信设备之间的连接。它处理以下内容:
- 帮助一个设备定位网络上的另一个对等点。
- 协助连接协商
- 关闭已建立的连接或在需要时重置它
您可以为 WebRTC 项目使用多种信令实现。对于 iOS 应用程序,您可以使用Node.js服务器或带有 WebSocket 实现的Swift 信号服务器。例如,开源的 WebRTC 和 WebSocket sipml5 SIP 客户端网关服务器允许用户使用浏览器和 iOS 设备进行视频聊天/通话。
有多种方法可以将 WebRTC 集成到 iOS 应用程序中。一种方法是使用第三方 API。如果您想编译您的 WebRTC 框架,官方WebRTC iOS 开发指南为开发人员提供了分步说明。将 WebRTC 添加到 iOS 应用程序的另一种可能的选择是使用 Swift 包,例如适用于 iOS 和 macOS 的 WebRTC 二进制文件。使用 Swift 包集成是将 WebRTC 集成到您的 iOS 项目中的最简单方法之一。
为 iOS 应用程序使用 WebRTC 二进制框架
在本节中,您将了解如何使用 Swift 包 WebRTC Binaries for iOS 将 WebRTC 实现添加到您的 iOS 应用程序。要完成此部分,您可以使用 Xcode 13 或 14 并执行以下步骤。
- 启动 Xcode 并创建一个名为iOSWebRTCVideoChat的空白 SwiftUI 项目。选择SwiftUI作为界面并选择Swift作为语言。
- 要从 GitHub 获取 WebRTC 二进制文件,您可以使用依赖项管理器,例如CocoaPods或Swift Package Manager。由于 Xcode 内置了对 Swift Package Manager 的支持,您应该使用它来简化集成过程。单击File,选择Add Packages…,然后将此包 URL https://github.com/stasel/WebRTC粘贴到搜索字段中。
- 然后,单击添加包将其集成到您的项目中。
成功完成此步骤后,您将在项目导航器的包依赖项下看到 WebRTC 实现。
您现在可以通过导入将 WebRTC 添加到您的代码中import WebRTC
。
通过 iOS 演示应用程序使用和测试WebRTC
您可以从GitHub下载并测试本节中使用的 iOS WebRTC 演示应用程序。该框架使用两个信令服务器。一个 Node.js 服务器和一个使用WebSocket构建的 Swift 服务器。您可以启动任何服务器来运行该应用程序。这些中的每一个都有相同的目的:
- 报告有关错误、会话和连接状态的信息。
- 管理要通信的媒体的网络配置。
假设您想使用一台 iOS 设备与另一台 iOS 设备进行通信。要在两个 iOS 设备之间建立通信,您可以使用WebRTC-iOS的示例信令服务器 Xcode 项目。
要运行 WebRTC iOS 演示应用程序,您应该
- Xcode 12 或更高版本和 iOS 12 或更高版本
- npm 和 Node.js(用于启动 NodeJS 信令服务器)
- macOS 10.15 或更高版本(用于运行 Swift 信令服务器)。
Xcode 项目和设置
- 从 GitHub 克隆或下载 WebRTC-iOS 项目。
- 打开Xcode工程,找到Config.swift设置默认信令服务器URL。
- 使用 macOS 系统首选项中的网络名称替换服务器 URL。
- 导航到下载的文件夹并找到信令文件夹。它包含两个服务器。启动 NodeJS 服务器或 Swift 服务器。最简单的方法是从 Swift 文件夹中打开SignalingServer.xcodeproj并运行代码。
在两个设备上运行该应用程序
启动信令服务器后,您可以通过从 Xcode 选择连接的设备在实际的 iOS 设备上运行该应用程序。首先,两个设备都需要交换网络信息。
总而言之,您可以通过多种方式为您的 iOS 音频和视频通话应用程序集成 WebRTC。由于 WebRTC 的标准没有定义该技术的信令协议,开发者可以选择他们喜欢的任何信令服务器。例如,您可以从 WebSocket、NodeJS 服务器和 FireStore 构建 Swift 服务器,或者使用 Python、PHP 和 Ruby 服务器等 Web 框架来实现 iOS WebRTC。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/10309.html