Elixir WebRTC 简介

在过去的几个月里,我们一直在非常努力地开发 W3C WebRTC 规范的 Elixir 实现,现在我们很高兴地正式宣布它的第一个版本 —— ex_webrtc 的 0.1 版本!

Elixir WebRTC 简介

但为什么呢?我们在 Elixir 中使用 WebRTC 已经有好几年了,但主要是使用 Membrane Framework 将一些 C 和 Erlang 库粘合在一起,除了一些问题之外,大部分都很好:

  • 有时我们需要为底层库做贡献,或者更糟糕的是,维护我们自己的分叉——这很费劲;
  • 很难让外部工程师了解我们的代码,因为它与通常的 WebRTC API 完全不同;
  • Membrane 的设计非常出色,但我们意识到 WebRTC API 并不能很好地映射到管道模型中,这给一些事情带来了不必要的困难。

考虑到之前的经验和这些问题,我们决定从头开始编写一个(几乎)纯 Elixir、符合 W3C 标准、开源的 WebRTC 实现,并提供整个网络堆栈。我们的目标是为 Elixir 生态系统创建一个与 Pion 或 WebRTC.rs 等项目类似的解决方案。到目前为止,我们的方向是正确的!

在了解 0.1 版的具体内容之前,请查看本快速教程,了解如何使用 Phoenix FrameworkElixir NxElixir WebRTC 创建一个 Web 应用程序,根据浏览器的网络摄像头视频馈送执行图像识别!

0.1 版有哪些内容?

第一个版本重点关注三个方面:

  • 符合标准的 API;
  • 易于与 Elixir 生态系统集成;
  • 学习资源。

API

ExWebRTC 尝试与众所周知的 JavaScript API 保持一致,同时又与 Elixir 保持一致。这样做的目的是让熟悉 WebRTC 的人能够轻松上手,但又不影响 Elixir 强大而独特的神奇功能。0.1 版本已经提供了 JavaScript API 中的大部分功能。

例如,JS.NET 中的这段代码:

const pc = new RTCPeerConnection();
const tr = pc.addTransceiver("audio");
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);

映射到以下 Elixir 代码:

{:ok, pc} = PeerConnection.start_link()
{:ok, tr} = PeerConnection.add_transceiver(pc, :audio)
{:ok, offer} = PeerConnection.create_offer(pc)
:ok = PeerConnection.set_local_description(pc, offer)

请参阅我们的 API 参考示例 了解更多信息。

简单集成

Elixir WebRTC 的目标之一是吸引 Elixir 用户,并易于集成到现有的 Elixir 项目中!有鉴于此,我们编写了 ExWebRTC Dashboard —— Phoenix的统计可视化。只需添加 ExWebRTCDashboard 作为 Phoenix LiveDashboard 的附加页面,就能获得与 Chrome 浏览器的 chrome://webrtc-internals 类似的功能。

# add this to your Phoenix app's router.ex

live_dashboard "/dashboard",
  additional_pages: [exwebrtc: ExWebRTCDashboard]

了解一些 WebRTC

了解 W3C 规范及其所有怪异之处并非易事。我们花了好几天时间阅读 RFC(我个人最喜欢的是 RFC 8829,是冬日夜晚喝一杯热巧克力的好读物 ☕ ),逆向工程 Chrome 浏览器的实现,并在 webrtc-pc repo 中提出问题(有时是愚蠢的问题)。

我们想把所有这些知识汇集在一起,Mastering Transceivers 指南就是朝着这个方向迈出的第一步。它由一系列示例组成,解释了 WebRTC 收发器的一些技巧和窍门。每个示例都包含 JS(您可以在浏览器中快速运行并进行实验,这一切都要归功于 JS Fiddle!)和 Elixir 代码段,这让您更容易理解浏览器 API 与我们的 API 之间的映射关系。我们希望将来能为 Elixir 代码添加 Livebooks!

Elixir WebRTC 简介
Mastering Transceivers指南

下一步是什么?

我们对迄今为止取得的成就感到无比兴奋,对未来的发展更是充满期待!我们对 0.2 版本的计划是

  • 添加对服务质量功能的支持,如全传输拥塞控制(WebRTC 信号源,如浏览器,使用它来估算它们能使用多少网络带宽,从而估算媒体的质量)或重传(请记住,WebRTC 通常使用 UDP,而 UDP 是不可靠的);
  • 增加对某些 ICE 功能的支持,如 mDNS ICE 候选者(防止私有 IP 地址泄漏)或 TURN 服务器(在某些情况下,无法使用 P2P 连接,TURN 服务器需要转发网络流量);
  • 改进 QoL 和性能,修复 Bug(这些 Bug 肯定存在)。

译自:https://blog.swmansion.com/introducing-elixir-webrtc-a37ece4bfca1

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

(0)

相关推荐

发表回复

登录后才能评论