#![cfg(target_os = "macos")]
use anyhow::Result;
use bytes::BytesMut;
use ffutility::parsers::AnnexBStreamImport;
use ffutility::encoders::InputType;
use ffutility::streams::StdinH264Stream;
use moq_native::client;
use std::net::SocketAddr;
use std::sync::{Arc, Mutex};
use tracing_subscriber::EnvFilter;
use url::Url;
#[tokio::main]
async fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_writer(std::io::stderr)
.init();
let mut tls = moq_native::client::ClientTls::default();
tls.disable_verify = Some(true);
let quic_client = client::Client::new(client::ClientConfig {
bind: SocketAddr::from(([0, 0, 0, 0], 0)),
tls
})?;
let broadcast: hang::BroadcastProducer = hang::BroadcastProducer::new();
let url = Url::parse("https://127.0.0.1:4443/demo/").unwrap();
let session: web_transport_quinn::Session = quic_client.connect(url).await?;
let mut session: moq_lite::Session = moq_lite::Session::connect(session).await?;
session.publish("", broadcast.inner.consume());
let mut annexb_import = AnnexBStreamImport::new(Arc::new(Mutex::new(broadcast)), 736, 414);
let mut rx_stream = StdinH264Stream::new(1920, 1080, InputType::YUV420P)?;
let mut track = annexb_import.init_from(&mut rx_stream).await?;
tokio::select! {
res = annexb_import.read_from(&mut rx_stream, &mut track) => {
Ok(res?)
},
res = session.closed() => {
Err(res.into())
},
}
}