为了账号安全,请及时绑定邮箱和手机立即绑定

### 一次硬核的底层语言实验:用 Uya 从零构建 WebRTC 并实现与 Chrome 的互通

Uya WebRTC 项目近日发布了 v0.3.0 里程碑版本,标志着这一雄心勃勃的工程迈出了关键一步。该项目的核心目标是:完全摒弃对现有 libwebrtc 等 C++ 库的依赖,使用新兴系统编程语言 Uya 从头实现 WebRTC 的传输层(transport)逻辑,并成功与主流浏览器 Chrome 建立音视频通话

此次更新将验证范围从早期仅支持 DataChannel 的基础连接,正式拓展至 Chrome 的完整视频通话链路,包括 SDP 协商、SRTP 加密、VP8 视频流接收与路由等核心环节,并首次实现了基于本机 FFmpeg 的手工互通演示。


Uya:为高性能系统而生的新语言

Uya 是一门仍在演进中的系统级编程语言及配套工具链,旨在为网络、嵌入式和高性能服务等场景提供接近 C/C++ 的精细控制能力,同时在模块化、错误处理、泛型、异步模型、标准库设计及构建体验等方面,提供更现代化、更适合团队协作的工程范式。

在 WebRTC 项目中,Uya 承担了三大核心任务:

  1. 协议栈与状态机实现
    涵盖 SDP、ICE、STUN/TURN、DTLS、SRTP/SRTCP、RTP/RTCP、SCTP DataChannel、PeerConnection 全生命周期管理,以及性能统计与追踪(stats/trace)。

  2. 高性能热路径数据结构
    包括固定容量缓冲区(fixed-capacity buffer)、内存池(arena)、环形队列(ring queue)、包克隆预算(packet clone budget)、抖动缓冲与重组(jitter/reassembly)、流量整形器(pacer)等,确保低延迟、高吞吐的数据处理。

  3. 极简跨平台抽象层
    不复用 libwebrtc、BoringSSL、usrsctp、libsrtp、libvpx 或 libopus 等任何第三方运行时对象。仅在操作系统原语层面(如 socket、时钟、线程、epoll/kqueue)保留轻量级 FFI(外部函数接口),最大限度保证代码的纯净性与可控性。

值得一提的是,本次发布严格使用仓库内嵌的 ./uya/bin/uya 编译器及 ./uya/lib 标准库快照进行构建和验证,确保发布产物的可复现性,不依赖开发者本地环境。


v0.3.0 版本核心进展

1. PeerConnection 支持 Chrome 视频流
新增对 video media sectionaddTransceiveraddTrack 等 API 的支持,并实现了 processSrtpPacketrouteVideoFrame 的关键路径。通过专用测试门禁 check_phase14_peer_connection_chrome_video.sh,可自动编译并运行端到端测试,验证 Chrome 发出的 VP8 视频流能否被 Uya 正确接收、解密并路由。

2. 本机手工互通演示(Host FFmpeg Chrome Call)
执行 make host-ffmpeg-chrome-call 命令,将启动一个本地网页:

  • 左侧:Chrome 采集的本地摄像头画面;
  • 右侧:Uya 生成的合成视频流;
  • 中间窗口:可实时播放 Uya 接收到的 Chrome 音视频流。

页面底部实时显示 ICE 状态、首帧耗时、RTP 包计数等关键指标,有效区分“数据包已发送”和“浏览器已成功解码”两种状态,为调试提供直观依据。

3. 端到端(E2E)自动化验证强化
test-ffmpeg-chrome-call 测试套件得到加强,覆盖范围包括:

  • FFmpeg 作为外部编解码器的边界交互;
  • 直接发送器(direct sender)的 RTP/SRTP/SRTCP 封包逻辑;
  • DTLS、STUN、SRTP 等控制面协议的运行时处理;
  • 音视频播放的冒烟测试(smoke test)与合成预览;
  • 1080p MP4 文件的手动回放验证;
  • Chrome 通话中音视频 RTP 包与解码帧的精确统计。

4. 构建与发布流程标准化
所有发布验证均强制使用仓库内置的 Uya 工具链(当前版本 v0.10.0),确保构建环境的一致性和结果的可靠性。


值得关注的技术方向

此版本为以下领域的探索者提供了宝贵的参考:

  • 如何在不依赖 libwebrtc 的前提下,清晰划分纯 Uya 实现的 WebRTC 协议边界;
  • PeerConnection 层如何从仅支持数据通道,逐步演进至完整的音视频媒体会话;
  • 如何设计渐进式的 Chrome 互通验证门禁,确保每一步都可测、可控;
  • 如何将 FFmpeg 作为显式的参考编解码器用于主机端互通测试,同时避免其成为默认运行时依赖;
  • 如何为 RK1106/RV1103B 等嵌入式芯片的 H.264/G.711 推流场景,复用同一套 Uya WebRTC 传输层。

当前限制与未来展望

尽管 v0.3.0 取得了显著进展,项目仍处于实验阶段:

  • 通用 PeerConnection 尚未达到生产级浏览器 P2P API 的完整度,音视频采集与发送主要通过 direct sender 和示例入口实现;
  • FFmpeg 仅作为手工互通的参考实现,未集成至默认运行时;
  • 纯 Uya 实现的 Opus 音频编解码桥接、VP8 的 UPM 路径依赖、以及跨平台 CI 矩阵仍在开发中;
  • 在 RK1106 等板端的真实链路,仍需依赖 Rockchip SDK、MPI、VENC/AENC 等专有组件及特定网络环境。

这次发布不仅是 Uya 语言能力的一次有力证明,更是对“能否用一门新语言从零重建现代通信基石”这一命题的大胆回应。它向世界展示了一种可能性:未来的高性能网络基础设施,或许将不再由 C++ 垄断,而是由更安全、更高效、更易协作的新一代语言所构建。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消