str0m::rtp

Struct StreamTx

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

Outgoing encoded stream.

A stream is a primary SSRC + optional RTX SSRC.

This is RTP level API. For sample level API see Rtc::writer.

Implementations§

Source§

impl StreamTx

Source

pub fn ssrc(&self) -> Ssrc

The (primary) SSRC of this encoded stream.

Source

pub fn rtx(&self) -> Option<Ssrc>

The resend (RTX) SSRC of this encoded stream.

Source

pub fn mid(&self) -> Mid

Mid for this stream.

In SDP this corresponds to m-line and “Media”.

Source

pub fn rid(&self) -> Option<Rid>

Rid for this stream.

This is used to separate streams with the same Mid when using simulcast.

Source

pub fn set_rtx_cache( &mut self, max_packets: usize, max_age: Duration, rtx_ratio_cap: Option<f32>, )

Configure the RTX (resend) cache.

This determines how old incoming NACKs we can reply to.

rtx_ratio_cap determines when to clear queued resends because of too many resends, i.e. if tx_sum / (rtx_sum + tx_sum) > rtx_ratio_cap. None disables this functionality so all queued resends will be sent.

The default is 1024 packets over 3 seconds and RTX cache drop ratio of 0.15.

Source

pub fn set_unpaced(&mut self, unpaced: bool)

Set whether this stream is unpaced or not.

This is only relevant when BWE (Bandwidth Estimation) is enabled. By default, audio is unpaced thus not held to a steady send rate by the Pacer.

This overrides the default behavior.

Source

pub fn write_rtp( &mut self, pt: Pt, seq_no: SeqNo, time: u32, wallclock: Instant, marker: bool, ext_vals: ExtensionValues, nackable: bool, payload: Vec<u8>, ) -> Result<(), PacketError>

Write RTP packet to a send stream.

The payload argument is expected to be only the RTP payload, not the RTP packet header.

  • pt Payload type. Declared in the Media this encoded stream belongs to.
  • seq_no Sequence number to use for this packet.
  • time Time in whatever the clock rate is for the media in question (normally 90_000 for video and 48_000 for audio).
  • wallclock Real world time that corresponds to the media time in the RTP packet. For an SFU, this can be hard to know, since RTP packets typically only contain the media time (RTP time). In the simplest SFU setup, the wallclock could simply be the arrival time of the incoming RTP data. For better synchronization the SFU probably needs to weigh in clock drifts and data provided via the statistics, receiver reports etc.
  • marker Whether to “mark” this packet. This is usually done for the last packet belonging to a series of RTP packets constituting the same frame in a video stream.
  • ext_vals The RTP header extension values to set. The values must be mapped in the session, or they will not be set on the RTP packet.
  • nackable Whether we should respond this packet for incoming NACK from the remote peer. For audio this is always false. For temporal encoded video, some packets are discardable and this flag should be set accordingly.
  • payload RTP packet payload, without header.

Trait Implementations§

Source§

impl Debug for StreamTx

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. 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> Instrument for T

Source§

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

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

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.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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