Native WebRTC 开发:libWebRTC 和替代方案指南

WebRTC 使开发人员能够构建功能强大的基于网络的实时通信应用程序。虽然 WebRTC 通常在网络浏览器中实现,但您也可以通过将 WebRTC 标准嵌入应用程序的代码库,将此功能集成到本地应用程序中。这通常需要使用 libWebRTC,它是由 Google 维护的一个开源项目,提供了 WebRTC 协议和 API 的全面实现。

在本篇文章中,我们将介绍使用 libWebRTC 构建原生视频聊天应用程序的过程,以及应遵循的最佳实践。我们还探讨了谷歌 libWebRTC 的替代方案,如 React Native WebRTC 和 Flutter WebRTC,以及 Pion、WebRTC.rs 和 aiortc 等独立方案。

WebRTC:标准、技术和开发者生态系统

在谈论 WebRTC 时,重要的是要了解该术语指的是一种标准、一种技术和一个开发者生态系统。

  • 作为一种标准,WebRTC 指的是互联网工程任务组 (IETF) 和万维网联盟 (W3C) 等组织的工作,它们定义了在浏览器中启用实时通信功能的方法。
  • WebRTC 作为一种技术,指的是应用编程接口 (API),您可以用它来设置媒体流并与其他对等设备和服务器建立连接。
  • 作为开发者生态系统的 WebRTC 是指可用于构建实时通信应用程序的多个供应商和库。

同样,WebRTC 作为一种技术指的是标准的实现。目前有多种实现方式,但从项目的存在和规模来看,最重要的是 libWebRTC。

libWebRTC 是一个开源项目,主要由 Google 与 Meta 和 Microsoft 等其他公司共同维护。它采用 C++/C 语言编写。它兼容 Windows、macOS 和 Linux 应用程序,还为 Android 和 iOS 提供了 Java 和 Objective-C 绑定。

这就是你在大多数网络浏览器中都能找到的。在 Web 应用程序中,每次调用 getUserMedia 方法或实例化 RTCPeerConnection 对象时,最终使用的很可能就是它。

如前所述,虽然它通常是在网络浏览器中实现的,但并不妨碍您自己复制 libWebRTC 并将其添加到本地应用程序中,以便像在浏览器中一样启用实时通信功能。事实上,大多数实现此类功能的 Android 和 iOS 应用程序都采用了这种方法。

此外,供应商和 CPaaS 提供商也会基于 libWebRTC 或匹配其功能和特性构建 SDK 和库。

构建 WebRTC 原生应用程序的过程是怎样的?

开始使用 libWebRTC 需要克隆源代码,安装谷歌的 Depot Tools,并使用 gn 和 ninja 构建二进制文件。之后,你就可以将其打包并作为库添加到你的应用程序代码库中,以便使用其功能。

从这里开始,整个过程与构建基于网络的应用程序类似。主要区别在于,您可以完全控制其内部运作。您可以根据具体的使用情况对其进行调整,而不是仅仅依赖于浏览器的实现。

此外,还可以自行决定使用哪个 WebRTC 版本以及更新频率。

不过,这也带来了额外的负担。例如,在您更新或手动将错误修复或新功能添加到代码库之前,您无法获得上游添加的错误修复或新功能。

libWebRTC 最佳实践

通过遵循一些最佳实践,可以使用 libWebRTC 构建最可靠和高性能的本地应用程序,同时还能为 WebRTC 生态系统的持续改进做出贡献。

可以遵循的一些最佳实践包括:

  • 维护一个独立的 libWebRTC 代码库,作为本地改进和定制的起点
  • 控制升级计划
  • 定期重新审视上游修复和优化
  • 将本地修复和改进反馈给上游项目

libWebRTC 的替代方案

libWebRTC 为 WebRTC 标准提供了成熟的、久经考验的实现。不过,在某些情况下,它可能不是构建本地应用程序的最佳选择。

在以下情况下,可能需要考虑 libWebRTC 的替代方案:

  • 使用的软件栈不支持
  • 只需要该实现提供的部分功能
  • 没有人力克隆和维护 libWebRTC 实现

在这种情况下,请考虑使用其他提供商的实现。例如,Pion WebRTC 项目提供了 WebRTC API 的模块化 Golang 实现,您可以在 Go 应用程序中使用它,而 WebRTC.rs 则为 Rust 开发人员提供了同样的实现。

此外还有 react-native-webrtc 模块或 flutter-webrtc 插件等选项,它们提供了基于 libwebrtc 的托管实现,让你免去了维护它的麻烦。

让我们来详细探讨其中的几种。

React Native WebRTC

React Native WebRTC 是一个功能强大的模块,可以让开发人员将实时通信功能集成到他们的 React Native 应用程序中。它支持各种平台,包括 Android、iOS、tvOS 和 Web,允许开发人员构建跨平台的视频和音频会议、数据通道和屏幕共享功能。

它提供了一系列功能,包括音频和视频通信、数据通道、屏幕捕捉以及对 x86_64 和 ARM 架构的支持。

开始使用 react-native-webrtc 模块非常简单,只需安装所谓的 npm 包,并按照相应平台的说明操作即可。该项目提供了详细的安装说明和特定平台指南,帮助开发人员快速、轻松地入门。

Flutter WebRTC

Flutter WebRTC 是一款功能强大的插件,允许开发人员将实时通信功能集成到他们的 Flutter 应用程序中,适用于各种平台,如 Android、iOS、Web、macOS、Windows、Linux 甚至嵌入式系统。

它支持多种功能,包括音频/视频通信、数据通道、屏幕捕捉、端到端加密等。这确保了构建交互式通信应用程序的全面功能。

上述替代方案以谷歌的 libWebRTC 官方实现为基础。现在,让我们来看看一些独立的实现。

Pion

Pion WebRTC 是 WebRTC API 的纯 Go 实现。它提供了一套全面的功能,包括支持发送和接收音频和视频、数据通道、ICE、STUN、TURN 和 SRTP。它易于使用并与其他 Go 项目集成,支持多种平台,包括 Windows、macOS、Linux、FreeBSD、iOS、Android 和 WASM。

该实现可用于多种项目,包括视频会议应用程序、远程控制系统和流媒体播放器。它是用 Go 构建实时通信应用程序的强大工具。

WebRTC.rs

WebRTC.rs 是 WebRTC 协议栈的纯 Rust 实现,用 Rust 重写了 Pion 协议栈。该项目仍处于活跃的早期开发阶段,其路线图可跟踪主要里程碑和版本。示例提供代码示例,展示如何使用 webrtc-rs 构建媒体和数据通道应用程序。

支持的最低 Rust 版本为 1.65.0,该项目使用 MIT 和 Apache-2.0 双重许可,这是 Rust 语言社区目前公认的标准。

Aiortc

aiortc 是一个用于 Web 实时通信(WebRTC)和对象实时通信(ORTC)的 Python 库,构建于 Python 标准异步 I/O 框架 asyncio 之上。它提供的 Pythonic API 与 JavaScript API 非常相似,使用了 coroutines 而不是 promises,并使用 pyee.EventEmitter 发送事件。

该实现提供了一种简单易读的方法,是程序员了解 WebRTC 内部工作原理或进行内部实验的绝佳起点。

实现浏览器之外的实时通信

虽然 WebRTC 在基于浏览器的应用领域中大放异彩,但您已经看到它的功能如何超越网络。通过在原生应用程序中利用 WebRTC,开发人员可以在各种平台和设备上创建强大的实时通信体验,为创新和协作开辟新的机遇。

作者:Hector Zelaya
译自:https://webrtc.ventures/2024/05/native-webrtc-development-a-guide-to-libwebrtc-and-alternatives/

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/48551.html

(0)

相关推荐

发表回复

登录后才能评论