xref: /webrtc/README.md (revision 603f4064)
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