gst-plugins-rs/net/webrtc/Cargo.toml
Mathieu Duponchelle 87c6719e1d webrtcsink: add define-encoder-bitrates signal
When congestion control is used for a session with multiple encoders,
the default implementation simply divides the overall bitrate equally
between encoders.

This is not always desirable, and this patch exposes a new signal
that users can register to, with two arguments:

* The overall bitrate to allocate
* A structure with an encoder.stream_name -> bitrate mapping

Handlers should return a similar structure with a custom mapping.

An example is also provided.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1792>
2024-09-25 15:19:44 +00:00

132 lines
4.6 KiB
TOML

[package]
name = "gst-plugin-webrtc"
version.workspace = true
edition.workspace = true
authors = ["Mathieu Duponchelle <mathieu@centricular.com>", "Thibault Saunier <tsaunier@igalia.com>"]
license = "MPL-2.0"
description = "GStreamer plugin for high level WebRTC elements and a simple signaling server"
repository.workspace = true
rust-version.workspace = true
[dependencies]
gst = { workspace = true, features = ["v1_20", "serde"] }
gst-app = { workspace = true, features = ["v1_20"] }
gst-audio = { workspace = true, features = ["v1_20", "serde"] }
gst-video = { workspace = true, features = ["v1_20", "serde"] }
gst-net = { workspace = true, features = ["v1_20"] }
gst-webrtc = { workspace = true, features = ["v1_20"] }
gst-sdp = { workspace = true, features = ["v1_20"] }
gst-rtp = { workspace = true, features = ["v1_20"] }
gst-utils.workspace = true
gst-base.workspace = true
uuid = { version = "1", features = ["v4"] }
anyhow = "1"
chrono = "0.4"
thiserror = "1"
futures = "0.3"
itertools = "0.12"
tokio = { version = "1", features = ["fs", "macros", "rt-multi-thread", "time"] }
tokio-native-tls = "0.3.0"
tokio-stream = "0.1.11"
async-tungstenite = { version = "0.28", features = ["tokio-runtime", "tokio-native-tls", "url"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
fastrand = "2.0"
gst_plugin_webrtc_protocol = { path="protocol", package = "gst-plugin-webrtc-signalling-protocol" }
gst_plugin_webrtc_signalling = { path="signalling", package = "gst-plugin-webrtc-signalling" }
human_bytes = "0.4"
once_cell.workspace = true
rand = "0.8"
url = "2"
aws-config = { version = "1.0", optional = true }
aws-types = { version = "1.0", optional = true }
aws-credential-types = { version = "1.0", optional = true }
aws-sigv4 = { version = "1.0", optional = true }
aws-smithy-http = { version = "0.60", features = [ "rt-tokio" ], optional = true }
aws-smithy-types = { version = "1.0", optional = true }
aws-sdk-kinesisvideo = { version = "1.0", optional = true }
aws-sdk-kinesisvideosignaling = { version = "1.0", optional = true }
http = { version = "1.0", optional = true }
data-encoding = {version = "2.3.3", optional = true }
url-escape = { version = "0.1.1", optional = true }
reqwest = { version = "0.11", features = ["default-tls"], optional = true }
parse_link_header = {version = "0.3", features = ["url"]}
async-recursion = { version = "1.0.0", optional = true }
livekit-protocol = { version = "0.3, < 0.3.4", optional = true }
livekit-api = { version = "0.3", default-features = false, features = ["signal-client", "access-token", "native-tls"], optional = true }
warp = {version = "0.3", optional = true, features = ["tls"] }
ctrlc = {version = "3.4.0", optional = true }
tracing = { version = "0.1", features = ["log"] }
tracing-subscriber = { version = "0.3", features = ["registry", "env-filter"] }
tracing-log = "0.2"
[dev-dependencies]
gst-plugin-rtp = { path = "../rtp" }
tokio = { version = "1", features = ["signal"] }
clap = { version = "4", features = ["derive"] }
regex = "1"
[lib]
name = "gstrswebrtc"
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper.workspace = true
[features]
default = ["v1_22", "aws", "janus", "livekit", "whip", "web_server"]
static = []
capi = []
v1_22 = ["gst/v1_22", "gst-app/v1_22", "gst-video/v1_22", "gst-webrtc/v1_22", "gst-sdp/v1_22", "gst-rtp/v1_22"]
doc = []
aws = ["dep:aws-config", "dep:aws-types", "dep:aws-credential-types", "dep:aws-sigv4",
"dep:aws-smithy-http", "dep:aws-smithy-types", "dep:aws-sdk-kinesisvideo",
"dep:aws-sdk-kinesisvideosignaling", "dep:data-encoding", "dep:http", "dep:url-escape"]
janus = ["dep:http"]
livekit = ["dep:livekit-protocol", "dep:livekit-api"]
whip = ["dep:async-recursion", "dep:reqwest", "dep:warp", "dep:ctrlc"]
web_server = ["dep:warp"]
[package.metadata.capi]
min_version = "0.9.21"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
import_library = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-rtp-1.0 >= 1.20, gstreamer-webrtc-1.0 >= 1.20, gstreamer-1.0 >= 1.20, gstreamer-app-1.0 >= 1.20, gstreamer-video-1.0 >= 1.20, gstreamer-sdp-1.0 >= 1.20, gobject-2.0, glib-2.0, gmodule-2.0"
[[example]]
name = "webrtcsink-stats-server"
[[example]]
name = "webrtcsink-high-quality-tune"
[[example]]
name = "webrtcsink-custom-signaller"
[[example]]
name = "webrtc-precise-sync-send"
[[example]]
name = "webrtc-precise-sync-recv"
[[example]]
name = "whipserver"
required-features = [ "whip" ]
[[example]]
name = "webrtcsink-define-encoder-bitrates"