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_timeoutreturnsNonewith 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 thenowjust handed tohandle_timeoutis the webrtc#862 busy-loop.
Implementations§
Source§impl PacerInterceptor
impl PacerInterceptor
Sourcepub fn pacer(&self) -> &LeakyBucket
pub fn pacer(&self) -> &LeakyBucket
The pacing bucket, for a bandwidth estimator to drive.
Sourcepub fn pacer_mut(&mut self) -> &mut LeakyBucket
pub fn pacer_mut(&mut self) -> &mut LeakyBucket
The pacing bucket, mutably — this is where set_target_bitrate is reached.
Trait Implementations§
Source§impl Interceptor for PacerInterceptor
impl Interceptor for PacerInterceptor
Source§fn bind_local_stream(&mut self, _info: &StreamInfo)
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)
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)
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)
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
impl Protocol<TransportMessage<AttributedPacket>, TransportMessage<AttributedPacket>, ()> for PacerInterceptor
Source§type Rout = TransportMessage<AttributedPacket>
type Rout = TransportMessage<AttributedPacket>
Output read message type Read more
Source§type Wout = TransportMessage<AttributedPacket>
type Wout = TransportMessage<AttributedPacket>
Output write message type Read more
Source§fn handle_read(&mut self, msg: TaggedPacket) -> Result<(), Self::Error>
fn handle_read(&mut self, msg: TaggedPacket) -> Result<(), Self::Error>
Handle an incoming read message. Read more
Source§fn handle_write(&mut self, msg: TaggedPacket) -> Result<(), Self::Error>
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>
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>
fn handle_timeout(&mut self, now: Instant) -> Result<(), Error>
Handle a timeout event. Read more
Auto Trait Implementations§
impl !RefUnwindSafe for PacerInterceptor
impl !UnwindSafe for PacerInterceptor
impl Freeze for PacerInterceptor
impl Send for PacerInterceptor
impl Sync for PacerInterceptor
impl Unpin for PacerInterceptor
impl UnsafeUnpin for PacerInterceptor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more