Harden LA publishers and add multi-relay guide
This commit is contained in:
parent
5d6f77f868
commit
cfc4902016
13 changed files with 1430 additions and 402 deletions
|
|
@ -5116,20 +5116,33 @@ async fn control_resolve(args: ControlResolveArgs) -> Result<()> {
|
|||
))
|
||||
}
|
||||
|
||||
fn select_relay_transport_for_web(
|
||||
transports: &[StreamTransportDescriptor],
|
||||
) -> Option<(String, String, String)> {
|
||||
for transport in transports {
|
||||
if let StreamTransportDescriptor::RelayMoq {
|
||||
url,
|
||||
broadcast_name,
|
||||
track_name,
|
||||
} = transport
|
||||
{
|
||||
return Some((url.clone(), broadcast_name.clone(), track_name.clone()));
|
||||
}
|
||||
}
|
||||
None
|
||||
fn relay_transports_for_web(transports: &[StreamTransportDescriptor]) -> Vec<WebStreamRelay> {
|
||||
transports
|
||||
.iter()
|
||||
.filter_map(|transport| {
|
||||
if let StreamTransportDescriptor::RelayMoq {
|
||||
url,
|
||||
broadcast_name,
|
||||
track_name,
|
||||
} = transport
|
||||
{
|
||||
Some(WebStreamRelay {
|
||||
relay_url: url.clone(),
|
||||
broadcast_name: broadcast_name.clone(),
|
||||
track_name: track_name.clone(),
|
||||
})
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, serde::Serialize)]
|
||||
struct WebStreamRelay {
|
||||
relay_url: String,
|
||||
broadcast_name: String,
|
||||
track_name: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Serialize)]
|
||||
|
|
@ -5139,6 +5152,7 @@ struct WebStreamUpsertReq<'a> {
|
|||
relay_url: &'a str,
|
||||
broadcast_name: &'a str,
|
||||
track_name: &'a str,
|
||||
relays: &'a [WebStreamRelay],
|
||||
expires_ms: u64,
|
||||
}
|
||||
|
||||
|
|
@ -5207,11 +5221,11 @@ async fn control_bridge_web(args: ControlBridgeWebArgs) -> Result<()> {
|
|||
}
|
||||
}
|
||||
|
||||
let Some((relay_url, broadcast_name, track_name)) =
|
||||
select_relay_transport_for_web(&announcement.transports)
|
||||
else {
|
||||
let relays = relay_transports_for_web(&announcement.transports);
|
||||
if relays.is_empty() {
|
||||
continue;
|
||||
};
|
||||
}
|
||||
let primary_relay = &relays[0];
|
||||
|
||||
if last_upserted_unix_ms
|
||||
.get(&stream_id)
|
||||
|
|
@ -5224,9 +5238,10 @@ async fn control_bridge_web(args: ControlBridgeWebArgs) -> Result<()> {
|
|||
let payload = WebStreamUpsertReq {
|
||||
stream_id: &stream_id,
|
||||
title: &announcement.stream.title,
|
||||
relay_url: &relay_url,
|
||||
broadcast_name: &broadcast_name,
|
||||
track_name: &track_name,
|
||||
relay_url: &primary_relay.relay_url,
|
||||
broadcast_name: &primary_relay.broadcast_name,
|
||||
track_name: &primary_relay.track_name,
|
||||
relays: &relays,
|
||||
expires_ms: now_unix_ms().saturating_add(ttl_ms),
|
||||
};
|
||||
|
||||
|
|
@ -5253,8 +5268,9 @@ async fn control_bridge_web(args: ControlBridgeWebArgs) -> Result<()> {
|
|||
last_upserted_unix_ms.insert(stream_id.clone(), announcement.updated_unix_ms);
|
||||
tracing::info!(
|
||||
stream = %stream_id,
|
||||
relay = %relay_url,
|
||||
broadcast = %broadcast_name,
|
||||
relay = %primary_relay.relay_url,
|
||||
broadcast = %primary_relay.broadcast_name,
|
||||
relay_count = relays.len(),
|
||||
"web stream upserted"
|
||||
);
|
||||
if args.once {
|
||||
|
|
@ -6853,6 +6869,7 @@ async fn wt_publish(args: WtPublishArgs) -> Result<()> {
|
|||
|
||||
cmd.stdout(Stdio::piped());
|
||||
cmd.stderr(Stdio::inherit());
|
||||
cmd.kill_on_drop(true);
|
||||
|
||||
tracing::info!(input=%args.input, "spawning ffmpeg");
|
||||
let mut child = cmd.spawn().context("failed to spawn ffmpeg")?;
|
||||
|
|
@ -6990,6 +7007,7 @@ async fn nbc_wt_publish(args: NbcWtPublishArgs) -> Result<()> {
|
|||
cmd.stdin(Stdio::piped());
|
||||
cmd.stdout(Stdio::piped());
|
||||
cmd.stderr(Stdio::inherit());
|
||||
cmd.kill_on_drop(true);
|
||||
|
||||
tracing::info!(
|
||||
source_url = %args.source_url,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue