Skip to main content

PacerInterceptor

Struct PacerInterceptor 

Source
pub struct PacerInterceptor { /* private fields */ }
Expand description

Releases queued packets at a target rate rather than as fast as they arrive.

§Where this belongs in the chain

Close to the wire, with every generator on the application side of it. Everything after it on the write path observes the release instant, so a send history goes there and records what actually left; placed the other way round it would record the enqueue instant and charge this queueing delay to the network.

Retransmissions, FEC repair packets and generated RTCP are all produced further out and reach the pacer on the belt, so they are metered along with everything else. Under the nested chain they bypassed it entirely.

§Differences from upstream

  • No ticker and no goroutine. Upstream runs a loop on a 5 ms time.Ticker; here the budget is a pure function of the instants handed in, so a release schedule is reproducible rather than merely eventually-correct.
  • Idle means idle. poll_timeout returns None with nothing queued, so an idle connection does not wake the whole chain at the pacing interval.
  • The deadline is when the head can afford to go, not now + interval, so it always advances — a deadline at or before the now just handed to handle_timeout is the webrtc#862 busy-loop.

Implementations§

Source§

impl PacerInterceptor

Source

pub fn pacer(&self) -> &LeakyBucket

The pacing bucket, for a bandwidth estimator to drive.

Source

pub fn pacer_mut(&mut self) -> &mut LeakyBucket

The pacing bucket, mutably — this is where set_target_bitrate is reached.

Source

pub fn queued(&self) -> usize

How many packets are waiting to be released.

Source

pub fn dropped(&self) -> u64

How many packets have been refused because the queue was full.

Trait Implementations§

Source§

impl Interceptor for PacerInterceptor

Source§

fn bind_local_stream(&mut self, _info: &StreamInfo)

bind_local_stream lets you modify any outgoing RTP packets. It is called once for per LocalStream. The returned method will be called once per rtp packet.
Source§

fn unbind_local_stream(&mut self, _info: &StreamInfo)

unbind_local_stream is called when the Stream is removed. It can be used to clean up any data related to that track.
Source§

fn bind_remote_stream(&mut self, _info: &StreamInfo)

bind_remote_stream lets you modify any incoming RTP packets. It is called once for per RemoteStream. The returned method will be called once per rtp packet.
Source§

fn unbind_remote_stream(&mut self, _info: &StreamInfo)

unbind_remote_stream is called when the Stream is removed. It can be used to clean up any data related to that track.
Source§

impl Protocol<TransportMessage<AttributedPacket>, TransportMessage<AttributedPacket>, ()> for PacerInterceptor

Source§

type Rout = TransportMessage<AttributedPacket>

Output read message type Read more
Source§

type Wout = TransportMessage<AttributedPacket>

Output write message type Read more
Source§

type Eout = ()

Output event type Read more
Source§

type Error = Error

Error type for protocol operations
Source§

type Time = Instant

Time/Instant type for timeout handling Read more
Source§

fn handle_read(&mut self, msg: TaggedPacket) -> Result<(), Self::Error>

Handle an incoming read message. Read more
Source§

fn poll_read(&mut self) -> Option<Self::Rout>

Poll for a processed read message. Read more
Source§

fn handle_write(&mut self, msg: TaggedPacket) -> Result<(), Self::Error>

Handle an outgoing write message. Read more
Source§

fn poll_write(&mut self) -> Option<TaggedPacket>

Poll for a processed write message. Read more
Source§

fn handle_timeout(&mut self, now: Instant) -> Result<(), Error>

Handle a timeout event. Read more
Source§

fn poll_timeout(&mut self) -> Option<Instant>

Poll for the next timeout deadline. Read more
Source§

fn handle_event(&mut self, _evt: Ein) -> Result<(), Self::Error>

Handle a custom event. Read more
Source§

fn poll_event(&mut self) -> Option<Self::Eout>

Poll for a generated event. Read more
Source§

fn close(&mut self) -> Result<(), Self::Error>

Close the protocol. 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
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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.

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.