[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"
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.25", features = ["tokio-runtime", "tokio-native-tls"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
fastrand = "2.0"
gst_plugin_webrtc_protocol = { path="protocol", package = "gst-plugin-webrtc-signalling-protocol" }
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", 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 }
crossbeam-channel = { version = "0.5", optional = true }

[dev-dependencies]
gst-plugin-rtp = { path = "../rtp" }
tokio = { version = "1", features = ["signal"] }
tracing = { version = "0.1", features = ["log"] }
tracing-subscriber = { version = "0.3", features = ["registry", "env-filter"] }
tracing-log = "0.2"
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"]
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:crossbeam-channel", "dep:reqwest", "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"
