use crate::imp::peer_connection_factory as imp_pcf; use crate::peer_connection::PeerConnection; use crate::rtp_parameters::RtpCapabilities; use crate::MediaType; use crate::RtcError; use std::fmt::Debug; #[derive(Debug, Clone)] pub struct IceServer { pub urls: Vec, pub username: String, pub password: String, } #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum ContinualGatheringPolicy { GatherOnce, GatherContinually, } #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum IceTransportsType { None, Relay, NoHost, All, } #[derive(Debug, Clone)] pub struct RtcConfiguration { pub ice_servers: Vec, pub continual_gathering_policy: ContinualGatheringPolicy, pub ice_transport_type: IceTransportsType, } impl Default for RtcConfiguration { fn default() -> Self { Self { ice_servers: vec![], continual_gathering_policy: ContinualGatheringPolicy::GatherOnce, ice_transport_type: IceTransportsType::All, } } } #[derive(Clone, Default)] pub struct PeerConnectionFactory { pub(crate) handle: imp_pcf::PeerConnectionFactory, } impl Debug for PeerConnectionFactory { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { f.debug_struct("PeerConnectionFactory").finish() } } impl PeerConnectionFactory { pub fn create_peer_connection( &self, config: RtcConfiguration, ) -> Result { self.handle.create_peer_connection(config) } pub fn get_rtp_sender_capabilities(&self, media_type: MediaType) -> RtpCapabilities { self.handle.get_rtp_sender_capabilities(media_type) } pub fn get_rtp_receiver_capabilities(&self, media_type: MediaType) -> RtpCapabilities { self.handle.get_rtp_receiver_capabilities(media_type) } } pub mod native { use super::PeerConnectionFactory; use crate::audio_source::native::NativeAudioSource; use crate::audio_track::RtcAudioTrack; use crate::video_source::native::NativeVideoSource; use crate::video_track::RtcVideoTrack; pub trait PeerConnectionFactoryExt { fn create_video_track(&self, label: &str, source: NativeVideoSource) -> RtcVideoTrack; fn create_audio_track(&self, label: &str, source: NativeAudioSource) -> RtcAudioTrack; } impl PeerConnectionFactoryExt for PeerConnectionFactory { fn create_video_track(&self, label: &str, source: NativeVideoSource) -> RtcVideoTrack { self.handle.create_video_track(label, source) } fn create_audio_track(&self, label: &str, source: NativeAudioSource) -> RtcAudioTrack { self.handle.create_audio_track(label, source) } } }