Skip to main content

WebRtcHandle

Struct WebRtcHandle 

Source
pub struct WebRtcHandle { /* private fields */ }
Available on crate feature webrtc only.
Expand description

Cheaply-cloneable handle for requesting new tracks, completing renegotiation, and picking up newly-attached tracks — same spirit as crate::elements::AppSourceHandle. Cloning shares one queue of pending WebRtcHandle::next_track results, same as any other multi-consumer channel — only one clone’s call actually receives a given track, so in practice only one place in the app should be draining it.

Implementations§

Source§

impl WebRtcHandle

Source

pub fn add_track( &self, kind: MediaKind, direction: Direction, codec: Codec, ) -> Result<TrackId>

Requests a new track of kind/direction. Blocks only while the peer’s bounded command queue is full; once the command is accepted, returns the locally assigned TrackId. This does not mean SDP negotiation has completed — receive the attached track through WebRtcHandle::next_track. Returns WebRtcError::Closed without yielding a TrackId if the peer loop has already stopped.

codec is what WebRtcTrackSink::consume on the resulting track will actually be fed (an encoder’s output, or a packet relayed verbatim from another track) — used to pick the matching payload type out of whatever this connection negotiates for the track, instead of guessing. If this connection never negotiates codec for it, pushed buffers are silently dropped, same as an unopened track.

Source

pub fn next_track( &self, ) -> Result<(TrackId, Mid, MediaKind, WebRtcTrackSink, WebRtcTrackSource)>

Blocks until the next track attaches — either one requested via WebRtcHandle::add_track (on either side) once its Mid exists, or one the remote peer added on its own. Returns the TrackId (so the caller can match it against what add_track returned — a Mid alone doesn’t exist yet at add_track time, see TrackId’s own docs) alongside the Mid/MediaKind str0m assigned it and the WebRtcTrackSink/WebRtcTrackSource pair to send/receive on it. Err once WebRtcPeer (and its run) is gone and every already-attached track has been drained.

Source

pub fn set_answer(&self, answer: SdpAnswer)

Feeds a remote answer back in, completing a renegotiation started by WebRtcHandle::add_track. A no-op if WebRtcPeer (and its run) is already gone.

Source

pub fn accept_remote_offer(&self, offer: SdpOffer) -> Result<SdpAnswer>

Accepts a fresh offer from the remote peer (their own renegotiation) and returns the resulting answer for the caller to ship back over its own signaling transport. Blocks until WebRtcPeer::run has actually applied it.

Trait Implementations§

Source§

impl Clone for WebRtcHandle

Source§

fn clone(&self) -> WebRtcHandle

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more