96 lines
2.7 KiB
Rust
96 lines
2.7 KiB
Rust
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<String>,
|
|
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<IceServer>,
|
|
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<PeerConnection, RtcError> {
|
|
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)
|
|
}
|
|
}
|
|
}
|