resolved merge

This commit is contained in:
Nickiel12 2024-08-17 20:10:19 +00:00
parent 27504d9754
commit cf4cf3feb9
7 changed files with 884 additions and 2433 deletions

View file

@ -1,5 +0,0 @@
{
"rust-analyzer.linkedProjects": [
"./helloworld/Cargo.toml",
]
}

3141
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -9,24 +9,16 @@ edition = "2021"
anyhow = "1.0.86"
config = "0.14.0"
ctrlc = "3.4.4"
gst-plugin-webrtc = { version = "0.13.0", features = ["v1_22"] }
gst-plugin-webrtchttp = "0.13.0"
gst-plugin-rtp = "0.13.0"
gst-plugin-rtsp = "0.13.0"
gst-plugin-hlssink3 = "0.13.0"
gst-plugin-reqwest = "0.13.0"
gstreamer = { version = "0.23.0", features = ["v1_24"] }
gstreamer-webrtc = { version = "0.23.0", features = ["v1_22"] }
lazy_static = "1.5.0"
gstreamer = { version = "0.23.0", features = ["v1_22"] }
gstreamer-app = { version = "0.23.0", features = ["v1_22"] }
log = "0.4.22"
serde = { version = "1.0.204", features = ["derive"] }
serde_json = "1.0.122"
snafu = "0.8.4"
# tokio = "1.39.2"
# tokio-tungstenite = "0.23.1"
tokio = "1.39.2"
tokio-tungstenite = "0.23.1"
toml = "0.8.19"
tracing = "0.1.40"
tracing-subscriber = "0.3.18"
tungstenite = "0.23.0"
webrtc = "0.11.0"

View file

@ -1,9 +0,0 @@
webrtcAdditionalHosts: [localhost, 0.0.0.0, 127.0.0.1, 10.0.0.114]
logLevel: debug
webrtcLocalTCPAddress: :8188
api: yes
paths:
mystream:
source: publisher

View file

@ -1,13 +0,0 @@
api: no
apiAddress: :9997
apiEncryption: no
paths:
mystream:
source: publisher
webrtc: yes
webrtcAddress: :8889
webrtcLocalUDPAddress: :8189
webrtcEncryption: no

View file

@ -1,110 +0,0 @@
use std::sync::Mutex;
use gstreamer::glib;
use gstreamer::subclass::prelude::*;
use gstreamer_webrtc::WebRTCSessionDescription;
use gstrswebrtc::signaller::{Signallable, SignallableImpl};
use lazy_static::lazy_static;
use std::sync::mpsc::Sender;
use tracing::error;
lazy_static! {
pub static ref SENDER_CHANNEL: Mutex<Option<Sender<SignallerEvent>>> = Mutex::new(None);
}
pub enum SignallerEvent {
Start,
Stop,
SendSDP(SdpMessage),
AddICE(ICE),
End(String),
}
pub struct ICE {
pub session_id: String,
pub candidate: String,
pub sdp_m_line_index: u32,
}
pub enum SdpMessage {
Offer(String),
Answer(String),
}
#[derive(Default)]
pub struct Signaller {}
impl Signaller {}
impl SignallableImpl for Signaller {
fn start(&self) {
SENDER_CHANNEL.lock().unwrap().as_ref().map(|msg_bus| {
if let Err(e) = msg_bus.send(SignallerEvent::Start) {
error!("Could not send message from the signaller to the message bus! {e}");
}
});
}
fn stop(&self) {
SENDER_CHANNEL.lock().unwrap().as_ref().map(|msg_bus| {
if let Err(e) = msg_bus.send(SignallerEvent::Stop) {
error!("Could not send message from the signaller to the message bus! {e}");
}
});
}
fn send_sdp(&self, _session_id: &str, sdp: &WebRTCSessionDescription) {
let message = {
if sdp.type_() == gstreamer_webrtc::WebRTCSDPType::Offer {
SdpMessage::Offer(sdp.sdp().as_text().unwrap())
} else {
SdpMessage::Answer(sdp.sdp().as_text().unwrap())
}
};
SENDER_CHANNEL.lock().unwrap().as_ref().map(|msg_bus| {
if let Err(e) = msg_bus.send(SignallerEvent::SendSDP(message)) {
error!("Could not send message from the signaller to the message bus! {e}");
}
});
}
fn add_ice(
&self,
session_id: &str,
candidate: &str,
sdp_m_line_index: u32,
_sdp_mid: Option<String>,
) {
let ice_msg = ICE {
session_id: session_id.to_string(),
candidate: candidate.to_string(),
sdp_m_line_index,
};
SENDER_CHANNEL.lock().unwrap().as_ref().map(|msg_bus| {
if let Err(e) = msg_bus.send(SignallerEvent::AddICE(ice_msg)) {
error!("Could not send message from the signaller to the message bus! {e}");
}
});
}
fn end_session(&self, sess_id: &str) {
let session_id = sess_id.to_string();
SENDER_CHANNEL.lock().unwrap().as_ref().map(|msg_bus| {
if let Err(e) = msg_bus.send(SignallerEvent::End(session_id)) {
error!("Could not send message from the signaller to the message bus! {e}");
}
});
}
}
#[glib::object_subclass]
impl ObjectSubclass for Signaller {
const NAME: &'static str = "MyCustomWebRTCSinkSignaller";
type Type = super::MyCustomSignaller;
type ParentType = glib::Object;
type Interfaces = (Signallable,);
}
impl ObjectImpl for Signaller {}

View file

@ -1,21 +0,0 @@
use gstreamer::glib;
use gstrswebrtc::signaller::Signallable;
mod imp;
pub use imp::{SdpMessage, SignallerEvent, ICE, SENDER_CHANNEL};
glib::wrapper! {
pub struct MyCustomSignaller(ObjectSubclass<imp::Signaller>) @implements Signallable;
}
impl MyCustomSignaller {
pub fn new() -> Self {
glib::Object::new()
}
}
impl Default for MyCustomSignaller {
fn default() -> Self {
MyCustomSignaller::new()
}
}