函式庫 / SDK
webrtc-rs/webrtc avatar
webrtc-rs/webrtc

WebRTC.rs:Rust 异步友好 WebRTC 栈

專案速覽:Rust 中非同步友善的 WebRTC 實作。 async webrtc crate 是在 Sans-I/O 核心之上進行的乾淨、符合人體工學、與運行時無關的重寫;它附帶 Tokio 和 smol 運行時後端,並且可以通過實現一種特徵來插入任何其他運行時。

5,145 個 Star508 個 ForkRustApache-2.0

秒懂

它是什麼?
webrtc-rs/webrtc 在 Sans-I/O rtc 核心上提供 runtime-agnostic async 层,默认 runtime-tokio,支持 PeerConnectionDriver 與自定义 Runtime trait。
適合誰用?
WebRTC.rs 适合在 Rust 服務里嵌入 WebRTC、且需要在 Tokio 與 smol 或多 runtime 間灵活切換的团队。它不适合要求稳定 0.20 以下 API 或不愿跟進 0.21 pre-release 的項目。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 11 天前。
用什麼語言寫的?
主要是 Rust(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

rtc 核心與 webrtc 异步层

Architecture:rtc Sans-I/O protocol core 95%+ W3C API compliance。webrtc crate thin async layer:PeerConnection user-facing async API;PeerConnectionDriver background event loop owns sockets drives rtc core;Runtime trait timers task spawning sockets runtime-agnostic。Inspired by Pion stack rewrite。

围绕 webrtc/rs 的「rtc 核心與 webrtc 异步层」,命令行参數 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「rtc 核心與 webrtc 异步层」,配置文件路径 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「rtc 核心與 webrtc 异步层」,默认端口 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「rtc 核心與 webrtc 异步层」,日志關键字 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「rtc 核心與 webrtc 异步层」,版本 tag 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「rtc 核心與 webrtc 异步层」,依赖安装 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「rtc 核心與 webrtc 异步层」,錯誤码 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「rtc 核心與 webrtc 异步层」,文檔章节 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

webrtc-rs-webrtc-deep-analysis 第 1 节收尾:在 webrtc/rs 克隆目录执行與本节相關的 README 命令,记录退出码、命令行参數 观测值與 stderr 摘要。

請依專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。第1節。

完成後再依1節專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。

0.21 pre-release Cargo 寫法

Trying 0.21 pre-release:Cargo does not select pre-release from plain 0.21,需 webrtc = "0.21.0-alpha.1"。release v0.21.0-beta.2。Feature runtime-tokio default;runtime-smol;runtime-mock MockRuntime virtual-clock tests。crypto-ring default;crypto-aws-lc-rs additive。

围绕 webrtc/rs 的「0.21 pre-release Cargo 寫法」,配置文件路径 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21 pre-release Cargo 寫法」,默认端口 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21 pre-release Cargo 寫法」,日志關键字 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21 pre-release Cargo 寫法」,版本 tag 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21 pre-release Cargo 寫法」,依赖安装 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21 pre-release Cargo 寫法」,錯誤码 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21 pre-release Cargo 寫法」,文檔章节 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21 pre-release Cargo 寫法」,命令行参數 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

webrtc-rs-webrtc-deep-analysis 第 2 节收尾:在 webrtc/rs 克隆目录执行與本节相關的 README 命令,记录退出码、配置文件路径 观测值與 stderr 摘要。

請依專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。第2節。

完成後再依2節專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。

自定义 Runtime 與 Crypto

Bring your own runtime:implement webrtc::runtime::Runtime with_runtime per connection。custom-runtime example async-executor async-io --no-default-features。Crypto SettingEngineBuilder with_crypto_provider AwsLcRsProvider。Implement RTCCryptoProvider forward to rtc。No cryptography in this crate。

围绕 webrtc/rs 的「自定义 Runtime 與 Crypto」,默认端口 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「自定义 Runtime 與 Crypto」,日志關键字 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「自定义 Runtime 與 Crypto」,版本 tag 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「自定义 Runtime 與 Crypto」,依赖安装 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「自定义 Runtime 與 Crypto」,錯誤码 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「自定义 Runtime 與 Crypto」,文檔章节 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「自定义 Runtime 與 Crypto」,命令行参數 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「自定义 Runtime 與 Crypto」,配置文件路径 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

webrtc-rs-webrtc-deep-analysis 第 3 节收尾:在 webrtc/rs 克隆目录执行與本节相關的 README 命令,记录退出码、默认端口 观测值與 stderr 摘要。

請依專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。第3節。

完成後再依3節專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。

PeerConnection 示例與 37 examples

Build peer connection create offer 代码片段 on_ice_candidate。build returns impl PeerConnection,store as Arc<dyn PeerConnection>。Next steps docs.rs/webrtc 與 37 runnable examples data channels simulcast ICE restart insertable streams。Architecture blog webrtc.rs/blog/2026/01/31/async-friendly-webrtc-architecture.html。

围绕 webrtc/rs 的「PeerConnection 示例與 37 examples」,日志關键字 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「PeerConnection 示例與 37 examples」,版本 tag 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「PeerConnection 示例與 37 examples」,依赖安装 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「PeerConnection 示例與 37 examples」,錯誤码 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「PeerConnection 示例與 37 examples」,文檔章节 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「PeerConnection 示例與 37 examples」,命令行参數 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「PeerConnection 示例與 37 examples」,配置文件路径 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「PeerConnection 示例與 37 examples」,默认端口 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

webrtc-rs-webrtc-deep-analysis 第 4 节收尾:在 webrtc/rs 克隆目录执行與本节相關的 README 命令,记录退出码、日志關键字 观测值與 stderr 摘要。

請依專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。第4節。

完成後再依4節專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。

Apache-2.0 與赞助

Apache-2.0 dual MIT/Apache 见 FAQ link。Sponsors Recall.ai Stream Channel.io。Discord discord.gg/4Ju8UHdXMs。star 约 5131,open issues 4。homepage webrtc.rs。

围绕 webrtc/rs 的「Apache-2.0 與赞助」,版本 tag 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「Apache-2.0 與赞助」,依赖安装 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「Apache-2.0 與赞助」,錯誤码 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「Apache-2.0 與赞助」,文檔章节 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「Apache-2.0 與赞助」,命令行参數 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「Apache-2.0 與赞助」,配置文件路径 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「Apache-2.0 與赞助」,默认端口 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「Apache-2.0 與赞助」,日志關键字 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

webrtc-rs-webrtc-deep-analysis 第 5 节收尾:在 webrtc/rs 克隆目录执行與本节相關的 README 命令,记录退出码、版本 tag 观测值與 stderr 摘要。

請依專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。第5節。

完成後再依5節專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。

0.21.0-alpha.1 编译驗收

Cargo.toml webrtc = "0.21.0-alpha.1" features runtime-tokio。cargo build。跑 examples/data-channels 或 examples/offer-answer。记录 ICE candidate 日志。试 runtime-smol feature 切換。custom-runtime --no-default-features 驗證自有 Runtime。固定 v0.21.0-beta.2 release notes。

围绕 webrtc/rs 的「0.21.0-alpha.1 编译驗收」,依赖安装 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21.0-alpha.1 编译驗收」,錯誤码 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21.0-alpha.1 编译驗收」,文檔章节 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21.0-alpha.1 编译驗收」,命令行参數 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21.0-alpha.1 编译驗收」,配置文件路径 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21.0-alpha.1 编译驗收」,默认端口 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21.0-alpha.1 编译驗收」,日志關键字 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

围绕 webrtc/rs 的「0.21.0-alpha.1 编译驗收」,版本 tag 應在 webrtc-rs-webrtc-deep-analysis 试装笔记里单獨成段:對照 README 寫下實际观测值,與官方描述不一致处標「文檔未说明」,勿用其它項目的经驗替代。

webrtc-rs-webrtc-deep-analysis 第 6 节收尾:在 webrtc/rs 克隆目录执行與本节相關的 README 命令,记录退出码、依赖安装 观测值與 stderr 摘要。

請依專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。第6節。

完成後再依6節專案 README 指向的命令、設定檔與輸出檔案檢查實際行為。這個判斷必須落在專案本身的入口上:例如 aweswitch config init、webpack.config.js、captures 目錄、Cargo feature 或 docker-compose.yml,而不是抽象地談工具優點。測試時記錄成功與失敗的具體結果,並把未由 README 說明的部分標為未知。

編輯結論

WebRTC.rs 适合在 Rust 服務里嵌入 WebRTC、且需要在 Tokio 與 smol 或多 runtime 間灵活切換的团队。它不适合要求稳定 0.20 以下 API 或不愿跟進 0.21 pre-release 的項目。先在 Cargo.toml 寫 webrtc = "0.21.0-alpha.1",按 README 實現 PeerConnectionEventHandler 创建 offer,跑 examples/data-channels 對照 docs.rs/webrtc。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記