1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
//! Rust port of [mediasoup](https://github.com/versatica/mediasoup) TypeScript library! //! //! For general information go to readme in repository. //! //! # For TypeScript users //! If you were using mediasoup in TypeScript before, most of the API should be familiar to you. //! However, this is not one-to-one port, API was adjusted to more idiomatic Rust style leveraging //! powerful type system and ownership system to make API more robust and more misuse-resistant. //! //! So you will find specific types in most places where plain strings were used, instead of //! `close()` you will see `Drop` implementation for major entities that will close everything //! gracefully when it goes out of scope. //! //! # How to start //! This is very low-level **library**. Which means it doesn't come with a ready to use signaling //! mechanism or easy to customize app scaffold (see //! [design goals](https://github.com/nazar-pc/mediasoup/tree/rust/rust/readme.md#design-goals)). //! //! It is recommended to visit mediasoup website and read //! [design overview](https://mediasoup.org/documentation/v3/mediasoup/design/) first. //! //! Pre-requisite for using this library is to have mediasoup worker. The simples way to get it is //! to run `npm i mediasoup` (see //! [installation instructions](https://mediasoup.org/documentation/v3/mediasoup/installation/)) and //! get worker binary from `node_modules/mediasoup/worker/out/Release/mediasoup-worker`. //! //! If you are hacking on the library just run `npm i` in the root of the repo and tests will pick //! up the worker binary automatically. //! //! With that in mind, you want start with creating [`WorkerManager`](worker_manager::WorkerManager) //! instance and then 1 or more workers. Workers a responsible for low-level job of sending media //! and data back and forth. Each worker is backed by single-core C++ worker process. On each worker //! you create one or more routers that enable injection, selection and forwarding of media and data //! through [`transport`] instances. There are a few different transports available, but most likely //! you'll want to use [`WebRtcTransport`](webrtc_transport::WebRtcTransport) most often. With //! transport created you can start creating [`Producer`](producer::Producer)s to send data to //! [`Router`](router::Router) and [`Consumer`](consumer::Consumer) instances to extract data from //! [`Router`](router::Router). //! //! Some of the more advanced cases involve multiple routers and even workers that can user more //! than one core on the machine or even scale beyond single host. Check //! [scalability page](https://mediasoup.org/documentation/v3/scalability/) of the official //! documentation. //! //! Please check integration and unit tests for usage examples, they cover all major functionality //! and are a good place to start until we have demo apps built in Rust). pub mod data_structures; mod macros; mod messages; mod ortc; pub mod router; pub mod rtp_parameters; pub mod scalability_modes; pub mod sctp_parameters; pub mod srtp_parameters; pub mod supported_rtp_capabilities; pub mod worker; pub mod worker_manager; // TODO: The mess below is because of https://github.com/rust-lang/rust/issues/59368 #[cfg(not(doc))] pub use router::audio_level_observer; #[cfg(doc)] #[path = "router/audio_level_observer.rs"] pub mod audio_level_observer; #[cfg(not(doc))] pub use router::consumer; #[cfg(doc)] #[path = "router/consumer.rs"] pub mod consumer; #[cfg(not(doc))] pub use router::data_consumer; #[cfg(doc)] #[path = "router/data_consumer.rs"] pub mod data_consumer; #[cfg(not(doc))] pub use router::producer; #[cfg(doc)] #[path = "router/producer.rs"] pub mod producer; #[cfg(not(doc))] pub use router::data_producer; #[cfg(doc)] #[path = "router/data_producer.rs"] pub mod data_producer; #[cfg(not(doc))] pub use router::transport; #[cfg(doc)] #[path = "router/transport.rs"] pub mod transport; #[cfg(not(doc))] pub use router::direct_transport; #[cfg(doc)] #[path = "router/direct_transport.rs"] pub mod direct_transport; #[cfg(not(doc))] pub use router::pipe_transport; #[cfg(doc)] #[path = "router/pipe_transport.rs"] pub mod pipe_transport; #[cfg(not(doc))] pub use router::plain_transport; #[cfg(doc)] #[path = "router/plain_transport.rs"] pub mod plain_transport; #[cfg(not(doc))] pub use router::rtp_observer; #[cfg(doc)] #[path = "router/rtp_observer.rs"] pub mod rtp_observer; #[cfg(not(doc))] pub use router::webrtc_transport; #[cfg(doc)] #[path = "router/webrtc_transport.rs"] pub mod webrtc_transport;