1<h1 align="center"> 2 <a href="https://webrtc.rs"><img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/webrtc.rs.png" alt="WebRTC.rs"></a> 3 <br> 4</h1> 5<p align="center"> 6 <a href="https://github.com/webrtc-rs/webrtc/actions"> 7 <img src="https://github.com/webrtc-rs/webrtc/workflows/webrtc/badge.svg?branch=master"> 8 </a> 9 <a href="https://codecov.io/gh/webrtc-rs/webrtc"> 10 <img src="https://codecov.io/gh/webrtc-rs/webrtc/branch/master/graph/badge.svg"> 11 </a> 12 <a href="https://deps.rs/repo/github/webrtc-rs/webrtc"> 13 <img src="https://deps.rs/repo/github/webrtc-rs/webrtc/status.svg"> 14 </a> 15 <a href="https://crates.io/crates/webrtc"> 16 <img src="https://img.shields.io/crates/v/webrtc.svg"> 17 </a> 18 <a href="https://docs.rs/webrtc"> 19 <img src="https://docs.rs/webrtc/badge.svg"> 20 </a> 21 <a href="https://doc.rust-lang.org/1.6.0/complement-project-faq.html#why-dual-mitasl2-license"> 22 <img src="https://img.shields.io/badge/license-MIT%2FApache--2.0-blue" alt="License: MIT/Apache 2.0"> 23 </a> 24 <a href="https://discord.gg/4Ju8UHdXMs"> 25 <img src="https://img.shields.io/discord/800204819540869120?logo=discord" alt="Discord"> 26 </a> 27 <a href="https://twitter.com/WebRTCrs"> 28 <img src="https://img.shields.io/twitter/url/https/twitter.com/webrtcrs.svg?style=social&label=%40WebRTCrs" alt="Twitter"> 29 </a> 30</p> 31<p align="center"> 32 A pure Rust implementation of WebRTC stack. Rewrite <a href="http://Pion.ly">Pion</a> WebRTC stack in Rust 33</p> 34 35<p align="center"> 36<strong>Sponsored with by</strong><br> 37</p> 38<p align="center"> 39<strong>Gold Sponsors:</strong><br> 40<a href="https://www.parity.io/" target="_blank"> 41<img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/parity.png" style="height:75px;" alt="Parity Technologies"> 42</a><br> 43<p align="center"> 44<strong>Silver Sponsors:</strong><br> 45<a href="https://getstream.io/?utm_source=https://github.com/webrtc-rs/webrtc&utm_medium=github&utm_content=developer&utm_term=webrtc" target="_blank"> 46<img src="https://stream-blog-v2.imgix.net/blog/wp-content/uploads/f7401112f41742c4e173c30d4f318cb8/stream_logo_white.png?h=50" alt="Stream Chat"> 47</a><br> 48<strong>Bronze Sponsors:</strong><br> 49<a href="https://www.embark-studios.com/" target="_blank"><img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/embark.jpg" alt="embark"></a><br> 50<a href="https://github.com/AdrianEddy" target="_blank">AdrianEddy</a> 51</p> 52 53# 54 55<details> 56<summary><b>Table of Content</b></summary> 57 58- [Overview](#overview) 59- [Features](#features) 60- [Building](#building) 61 - [Toolchain](#toolchain) 62 - [Monorepo Setup](#monorepo-setup) 63 - [Testing with Local Dependencies](#testing-with-local-dependencies) 64- [Open Source License](#open-source-license) 65- [Contributing](#contributing) 66</details> 67 68# 69 70## Overview 71 72WebRTC.rs is a pure Rust implementation of WebRTC stack, which rewrites <a href="https://github.com/pion/webrtc/releases/tag/v3.1.5">Pion</a> stack in Rust. 73This project is still in active and early development stage, please refer to the [Roadmap](https://github.com/webrtc-rs/webrtc/issues/1) to track the major milestones and releases. 74[Examples](https://github.com/webrtc-rs/webrtc/blob/master/examples/examples/README.md) provide code samples to show how to use webrtc-rs to build media and data channel applications. 75 76## Features 77 78<p align="center"> 79 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">WebRTC<a href="https://crates.io/crates/webrtc"><img src="https://img.shields.io/crates/v/webrtc.svg"></a> 80 <br> 81 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">Media<a href="https://crates.io/crates/webrtc-media"><img src="https://img.shields.io/crates/v/webrtc-media.svg"></a> 82 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">Interceptor<a href="https://crates.io/crates/interceptor"><img src="https://img.shields.io/crates/v/interceptor.svg"></a> 83 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">Data<a href="https://crates.io/crates/webrtc-data"><img src="https://img.shields.io/crates/v/webrtc-data.svg"></a> 84 <br> 85 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">RTP<a href="https://crates.io/crates/rtp"><img src="https://img.shields.io/crates/v/rtp.svg"></a> 86 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">RTCP<a href="https://crates.io/crates/rtcp"><img src="https://img.shields.io/crates/v/rtcp.svg"></a> 87 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">SRTP<a href="https://crates.io/crates/webrtc-srtp"><img src="https://img.shields.io/crates/v/webrtc-srtp.svg"></a> 88 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">SCTP<a href="https://crates.io/crates/webrtc-sctp"><img src="https://img.shields.io/crates/v/webrtc-sctp.svg"></a> 89 <br> 90 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">DTLS<a href="https://crates.io/crates/webrtc-dtls"><img src="https://img.shields.io/crates/v/webrtc-dtls.svg"></a> 91 <br> 92 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">mDNS<a href="https://crates.io/crates/webrtc-mdns"><img src="https://img.shields.io/crates/v/webrtc-mdns.svg"></a> 93 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">STUN<a href="https://crates.io/crates/stun"><img src="https://img.shields.io/crates/v/stun.svg"></a> 94 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">TURN<a href="https://crates.io/crates/turn"><img src="https://img.shields.io/crates/v/turn.svg"></a> 95 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">ICE<a href="https://crates.io/crates/webrtc-ice"><img src="https://img.shields.io/crates/v/webrtc-ice.svg"></a> 96 <br> 97 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">SDP<a href="https://crates.io/crates/sdp"><img src="https://img.shields.io/crates/v/sdp.svg"></a> 98 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/check.png">Util<a href="https://crates.io/crates/webrtc-util"><img src="https://img.shields.io/crates/v/webrtc-util.svg"></a> 99</p> 100<p align="center"> 101 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/webrtc_crates_dep_graph.png" alt="WebRTC Crates Dependency Graph"> 102</p> 103<p align="center"> 104 <img src="https://raw.githubusercontent.com/webrtc-rs/webrtc/master/doc/webrtc_stack.png" alt="WebRTC Stack"> 105</p> 106 107## Building 108 109### Toolchain 110 111webrtc-rs currently requires Rust 1.57.0+ to build. 112 113### Monorepo Setup 114 115All webrtc dependent crates and examples are included in this repository at the top level in a Cargo workspace. 116 117To build all webrtc examples: 118 119``` 120cd examples 121cargo test # build all examples (maybe very slow) 122#[ or just build single example (much faster) 123cargo build --example play-from-disk-vpx # build play-from-disk-vpx example only 124cargo build --example play-from-disk-h264 # build play-from-disk-h264 example only 125#... 126#] 127``` 128 129To build webrtc crate: 130 131``` 132cargo build [or clippy or test or fmt] 133``` 134 135## Open Source License 136Dual licensing under both MIT and Apache-2.0 is the currently accepted standard by the Rust language community and has been used for both the compiler and many public libraries since (see https://doc.rust-lang.org/1.6.0/complement-project-faq.html#why-dual-mitasl2-license). In order to match the community standards, webrtc-rs is using the dual MIT+Apache-2.0 license. 137 138 139## Contributing 140Contributors or Pull Requests are Welcome!!! 141