rust_webrtc/client/src/rtc.rs

44 lines
1.6 KiB
Rust
Raw Normal View History

use leptos::logging::log;
use wasm_bindgen_futures::JsFuture;
use web_sys::{
RtcConfiguration, RtcIceServer, RtcPeerConnection, RtcSessionDescriptionInit,
js_sys::{Array, Reflect},
wasm_bindgen::{JsCast, JsValue},
};
use crate::signal::send_offer;
pub async fn offer(username: String) {
let ice_server_addresses = vec![JsValue::from("stun:stun.l.google.com:19302")]
.into_iter()
.collect::<Array>();
let ice_server = RtcIceServer::new();
ice_server.set_urls(&JsValue::from(ice_server_addresses));
let ice_servers = vec![ice_server].into_iter().collect::<Array>();
let rtc_configuration = RtcConfiguration::new();
rtc_configuration.set_ice_servers(&ice_servers);
let peer_connection = RtcPeerConnection::new_with_configuration(&rtc_configuration).unwrap();
let peer_connection_create_offer_promise = peer_connection.create_offer();
let rtc_session_offer = JsFuture::from(peer_connection_create_offer_promise)
.await
.unwrap();
log!("{:#?}", rtc_session_offer);
let rtc_session_offer = rtc_session_offer
.as_ref()
.unchecked_ref::<RtcSessionDescriptionInit>();
log!("{:#?}", rtc_session_offer);
JsFuture::from(peer_connection.set_local_description(rtc_session_offer))
.await
.unwrap();
let rtc_session_offer = Reflect::get(&rtc_session_offer, &JsValue::from_str("sdp"))
.unwrap()
.as_string()
.unwrap();
log!("{}", rtc_session_offer);
2025-04-14 04:58:44 +03:00
let data = rtc_session_offer;
2025-04-14 04:58:44 +03:00
send_offer(&username, &data).await;
}
pub async fn answer() {}