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
impl StreamTx
Sourcepub fn rid(&self) -> Option<Rid>
pub fn rid(&self) -> Option<Rid>
Rid for this stream.
This is used to separate streams with the same Mid
when using simulcast.
Sourcepub fn set_rtx_cache(
&mut self,
max_packets: usize,
max_age: Duration,
rtx_ratio_cap: Option<f32>,
)
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.
Sourcepub fn set_unpaced(&mut self, unpaced: bool)
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.
Sourcepub 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>
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.