refactor: ♻️ media stream
This commit is contained in:
parent
53a73285b9
commit
87f7d0763f
3 changed files with 27 additions and 23 deletions
|
@ -25,7 +25,7 @@ pub fn app() -> impl IntoView {
|
||||||
})
|
})
|
||||||
.children(ToChildren::to_children(move || {
|
.children(ToChildren::to_children(move || {
|
||||||
let audio_stream = audio_stream.read();
|
let audio_stream = audio_stream.read();
|
||||||
let audio_stream = audio_stream.as_deref().unwrap().clone();
|
let audio_stream = audio_stream.as_deref().unwrap().as_ref().unwrap().clone();
|
||||||
|
|
||||||
let webrtc = WebRTC::new(Some(audio_stream), None, None).unwrap();
|
let webrtc = WebRTC::new(Some(audio_stream), None, None).unwrap();
|
||||||
let webrtc_state = webrtc.clone();
|
let webrtc_state = webrtc.clone();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use leptos::logging::log;
|
use protocol::Error;
|
||||||
use wasm_bindgen_futures::JsFuture;
|
use wasm_bindgen_futures::JsFuture;
|
||||||
use web_sys::{
|
use web_sys::{
|
||||||
MediaStream, MediaStreamConstraints, MediaStreamTrack, MediaTrackConstraints,
|
MediaStream, MediaStreamConstraints, MediaStreamTrack, MediaTrackConstraints,
|
||||||
|
@ -6,44 +6,48 @@ use web_sys::{
|
||||||
window,
|
window,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub async fn audio() -> MediaStream {
|
pub async fn audio() -> Result<MediaStream, Error> {
|
||||||
let media_devices = window().unwrap().navigator().media_devices().unwrap();
|
let media_devices = window()
|
||||||
|
.ok_or(Error::MediaStream("Accessing Window".to_owned()))?
|
||||||
|
.navigator()
|
||||||
|
.media_devices()
|
||||||
|
.map_err(|err_val| Error::MediaStream(format!("{:?}", err_val)))?;
|
||||||
|
|
||||||
let media_stream_constraints = MediaStreamConstraints::new();
|
let media_stream_constraints = MediaStreamConstraints::new();
|
||||||
let media_track_constraints = MediaTrackConstraints::new();
|
let media_track_constraints = MediaTrackConstraints::new();
|
||||||
|
|
||||||
media_stream_constraints.set_audio(&JsValue::TRUE);
|
media_stream_constraints.set_audio(&JsValue::TRUE);
|
||||||
|
|
||||||
media_track_constraints.set_echo_cancellation(&JsValue::FALSE);
|
media_track_constraints.set_echo_cancellation(&JsValue::FALSE);
|
||||||
media_track_constraints.set_noise_suppression(&JsValue::FALSE);
|
media_track_constraints.set_noise_suppression(&JsValue::FALSE);
|
||||||
media_track_constraints.set_auto_gain_control(&JsValue::FALSE);
|
media_track_constraints.set_auto_gain_control(&JsValue::FALSE);
|
||||||
|
|
||||||
let media_stream_promise = media_devices
|
let media_stream_promise = media_devices
|
||||||
.get_user_media_with_constraints(&media_stream_constraints)
|
.get_user_media_with_constraints(&media_stream_constraints)
|
||||||
.unwrap();
|
.map_err(|err_val| Error::MediaStream(format!("{:?}", err_val)))?;
|
||||||
let media_stream = JsFuture::from(media_stream_promise)
|
let media_stream = JsFuture::from(media_stream_promise)
|
||||||
.await
|
.await
|
||||||
.unwrap()
|
.map_err(|err_val| Error::MediaStream(format!("{:?}", err_val)))?;
|
||||||
.dyn_into::<MediaStream>()
|
let media_stream = media_stream.unchecked_ref::<MediaStream>();
|
||||||
.unwrap();
|
|
||||||
let audio_stream_tracks = media_stream.get_audio_tracks();
|
let audio_stream_tracks = media_stream.get_audio_tracks();
|
||||||
let audio_stream_tracks = audio_stream_tracks
|
let audio_stream_tracks = audio_stream_tracks
|
||||||
.iter()
|
.iter()
|
||||||
.map(|audio_track| audio_track.dyn_into::<MediaStreamTrack>().unwrap())
|
.map(|audio_track| MediaStreamTrack::from(audio_track))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
log!(
|
let audio_stream_track = audio_stream_tracks
|
||||||
"{:#?}\n audio_stream_track_count = {}",
|
.first()
|
||||||
audio_stream_tracks,
|
.ok_or(Error::MediaStream("Get First Media Track".to_owned()))?;
|
||||||
audio_stream_tracks.len()
|
|
||||||
);
|
|
||||||
let audio_stream_track = audio_stream_tracks.first().unwrap();
|
|
||||||
let audio_stream_track_apply_constraints_promise = audio_stream_track
|
let audio_stream_track_apply_constraints_promise = audio_stream_track
|
||||||
.apply_constraints_with_constraints(&media_track_constraints)
|
.apply_constraints_with_constraints(&media_track_constraints)
|
||||||
.unwrap();
|
.map_err(|err_val| Error::MediaStream(format!("{:?}", err_val)))?;
|
||||||
JsFuture::from(audio_stream_track_apply_constraints_promise)
|
JsFuture::from(audio_stream_track_apply_constraints_promise)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.map_err(|err_val| Error::MediaStream(format!("{:?}", err_val)))?;
|
||||||
let audio_stream = MediaStream::new().unwrap();
|
|
||||||
log!("{:#?}", audio_stream_track.get_constraints());
|
let audio_stream =
|
||||||
|
MediaStream::new().map_err(|err_val| Error::MediaStream(format!("{:?}", err_val)))?;
|
||||||
audio_stream.add_track(audio_stream_track);
|
audio_stream.add_track(audio_stream_track);
|
||||||
audio_stream
|
|
||||||
|
Ok(audio_stream)
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ pub struct User {
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
|
MediaStream(String),
|
||||||
InvalidSignalType(String),
|
InvalidSignalType(String),
|
||||||
UnexpectedSignalType(SignalType),
|
UnexpectedSignalType(SignalType),
|
||||||
WebSocketInitialization,
|
WebSocketInitialization,
|
||||||
|
@ -39,14 +40,13 @@ impl std::error::Error for Error {
|
||||||
impl Display for Error {
|
impl Display for Error {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
|
Error::MediaStream(err_val) => write!(f, "Media Stream | {}", err_val),
|
||||||
Error::InvalidSignalType(invalid_signal_type) => {
|
Error::InvalidSignalType(invalid_signal_type) => {
|
||||||
write!(f, "Invalid Signal Type: {}", invalid_signal_type)
|
write!(f, "Invalid Signal Type: {}", invalid_signal_type)
|
||||||
}
|
}
|
||||||
|
|
||||||
Error::UnexpectedSignalType(signal_type) => {
|
Error::UnexpectedSignalType(signal_type) => {
|
||||||
write!(f, "Unexpected Signal Type: {}", signal_type)
|
write!(f, "Unexpected Signal Type: {}", signal_type)
|
||||||
}
|
}
|
||||||
|
|
||||||
Error::WebSocketInitialization => write!(f, "WebSocket Initialization"),
|
Error::WebSocketInitialization => write!(f, "WebSocket Initialization"),
|
||||||
Error::WebSocketAuth => write!(f, "WebSocket Auth"),
|
Error::WebSocketAuth => write!(f, "WebSocket Auth"),
|
||||||
Error::WebSocketSend(send_error) => write!(f, "WebSocket Send: {}", send_error),
|
Error::WebSocketSend(send_error) => write!(f, "WebSocket Send: {}", send_error),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue