2021-11-30 21:49:33 +00:00
|
|
|
# webrtcsink examples
|
|
|
|
|
2023-09-28 15:19:50 +00:00
|
|
|
Collection of webrtcsink examples
|
2021-11-30 21:49:33 +00:00
|
|
|
|
|
|
|
## webrtcsink-stats-server
|
|
|
|
|
|
|
|
A simple application that instantiates a webrtcsink and serves stats
|
|
|
|
over websockets.
|
|
|
|
|
|
|
|
The application expects a signalling server to be running at `ws://localhost:8443`,
|
|
|
|
similar to the usage example in the main README.
|
|
|
|
|
|
|
|
``` shell
|
|
|
|
cargo run --example webrtcsink-stats-server
|
|
|
|
```
|
|
|
|
|
|
|
|
Once it is running, follow the instruction in the webrtcsink-stats folder to
|
|
|
|
run an example client.
|
2023-09-28 15:19:50 +00:00
|
|
|
|
|
|
|
## webrtcsink-custom-signaller
|
|
|
|
|
|
|
|
An example of custom signaller implementation, see the corresponding
|
|
|
|
[README](webrtcsink-custom-signaller/README.md) for more details on code and usage.
|
2024-04-03 17:10:40 +00:00
|
|
|
|
|
|
|
## WebRTC precise synchronization example
|
|
|
|
|
|
|
|
This example demonstrates a sender / receiver setup which ensures precise
|
|
|
|
synchronization of multiple streams in a single session.
|
|
|
|
|
|
|
|
[RFC 6051]-style rapid synchronization of RTP streams is available as an option.
|
|
|
|
Se the [Instantaneous RTP synchronization...] blog post for details about this
|
|
|
|
mode and an example based on RTSP instead of WebRTC.
|
|
|
|
|
2024-04-12 12:18:09 +00:00
|
|
|
The examples can also be used for [RFC 7273] NTP or PTP clock signalling and
|
|
|
|
synchronization.
|
|
|
|
|
2024-04-03 17:10:40 +00:00
|
|
|
[RFC 6051]: https://datatracker.ietf.org/doc/html/rfc6051
|
2024-04-12 12:18:09 +00:00
|
|
|
[RFC 7273]: https://datatracker.ietf.org/doc/html/rfc7273
|
2024-04-03 17:10:40 +00:00
|
|
|
[Instantaneous RTP synchronization...]: https://coaxion.net/blog/2022/05/instantaneous-rtp-synchronization-retrieval-of-absolute-sender-clock-times-with-gstreamer/
|
|
|
|
|
|
|
|
### Signaller
|
|
|
|
|
|
|
|
The example uses the default WebRTC signaller. Launch it using the following
|
|
|
|
command:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
cargo run --bin gst-webrtc-signalling-server
|
|
|
|
```
|
|
|
|
|
|
|
|
### Receiver
|
|
|
|
|
|
|
|
The receiver awaits for new audio & video stream publishers and render the
|
|
|
|
streams using auto sink elements. Launch it using the following command:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
cargo r --example webrtc-precise-sync-recv
|
|
|
|
```
|
|
|
|
|
|
|
|
The default configuration should work for a local test. For a multi-host setup,
|
|
|
|
see the available options:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
cargo r --example webrtc-precise-sync-recv -- --help
|
|
|
|
```
|
|
|
|
|
|
|
|
E.g.: the following will force `avdec_h264` over hardware decoders, activate
|
|
|
|
debug logs for the receiver and connect to the signalling server at the
|
|
|
|
specified address:
|
|
|
|
|
|
|
|
```shell
|
2024-04-12 12:18:09 +00:00
|
|
|
GST_PLUGIN_FEATURE_RANK=avdec_h264:MAX \
|
2024-04-03 17:10:40 +00:00
|
|
|
WEBRTC_PRECISE_SYNC_RECV_LOG=debug \
|
|
|
|
cargo r --example webrtc-precise-sync-recv -- --server 192.168.1.22
|
|
|
|
```
|
|
|
|
|
|
|
|
### Sender
|
|
|
|
|
|
|
|
The sender publishes audio & video test streams. Launch it using the following
|
|
|
|
command:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
cargo r --example webrtc-precise-sync-send
|
|
|
|
```
|
|
|
|
|
|
|
|
The default configuration should work for a local test. For a multi-host setup,
|
|
|
|
to set the number of audio / video streams, to enable rapid synchronization or
|
|
|
|
to force the video encoder, see the available options:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
cargo r --example webrtc-precise-sync-send -- --help
|
|
|
|
```
|
|
|
|
|
|
|
|
E.g.: the following will force H264 and `x264enc` over hardware encoders,
|
|
|
|
activate debug logs for the sender and connect to the signalling server at the
|
|
|
|
specified address:
|
|
|
|
|
|
|
|
```shell
|
2024-04-12 12:18:09 +00:00
|
|
|
GST_PLUGIN_FEATURE_RANK=264enc:MAX \
|
2024-04-03 17:10:40 +00:00
|
|
|
WEBRTC_PRECISE_SYNC_SEND_LOG=debug \
|
|
|
|
cargo r --example webrtc-precise-sync-send -- \
|
|
|
|
--server 192.168.1.22 --video-caps video/x-h264
|
|
|
|
```
|
|
|
|
|
|
|
|
### The pipeline latency
|
|
|
|
|
|
|
|
The `--pipeline-latency` argument configures a static latency of 1s by default.
|
|
|
|
This needs to be higher than the sum of the sender latency and the receiver
|
|
|
|
latency of the receiver with the highest latency. As this can't be known
|
|
|
|
automatically and depends on many factors, this has to be known for the overall
|
|
|
|
system and configured accordingly.
|
|
|
|
|
|
|
|
The default configuration is on the safe side and favors synchronization over
|
|
|
|
low latency. Depending on the use case, shorter or larger values should be used.
|
2024-04-12 12:18:09 +00:00
|
|
|
|
|
|
|
### RFC 7273 NTP or PTP clock signalling and synchronization
|
|
|
|
|
|
|
|
For [RFC 7273] NTP or PTP clock signalling and synchronization, you can use
|
|
|
|
commands such as:
|
|
|
|
|
|
|
|
#### Receiver
|
|
|
|
|
|
|
|
```shell
|
|
|
|
cargo r --example webrtc-precise-sync-recv -- --expect-clock-signalling
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Sender
|
|
|
|
|
|
|
|
```shell
|
|
|
|
cargo r --example webrtc-precise-sync-send -- --clock ntp --do-clock-signalling \
|
|
|
|
--video-streams 0 --audio-streams 2
|
|
|
|
```
|