Skip to main content

MediaStream

Struct MediaStream 

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

Represents a stream of media content.

A MediaStream is a collection of zero or more MediaStreamTrack objects, representing audio or video tracks. Each stream has a unique identifier and can be in an active or inactive state.

§Specification

See MediaStream in the W3C Media Capture and Streams specification.

§Examples

use rtc::media_stream::{MediaStream, MediaStreamId};
use rtc::media_stream::MediaStreamTrack;
use rtc::rtp_transceiver::rtp_sender::{RTCRtpCodec, RtpCodecKind};
use rtc::rtp_transceiver::rtp_sender::{RTCRtpEncodingParameters, RTCRtpCodingParameters};

let track = MediaStreamTrack::new(
    "stream-id".to_string(),
    "track-id".to_string(),
    "My Track".to_string(),
    RtpCodecKind::Audio,
    vec![RTCRtpEncodingParameters {
        rtp_coding_parameters: RTCRtpCodingParameters {
            ssrc: Some(12345),
            ..Default::default()
        },
        codec: RTCRtpCodec::default(),
        ..Default::default()
    }],
);

let stream = MediaStream::new("my-stream".to_string(), vec![track]);
assert_eq!(stream.stream_id(), "my-stream");

Implementations§

Source§

impl MediaStream

Source

pub fn new(stream_id: MediaStreamId, tracks: Vec<MediaStreamTrack>) -> Self

Creates a new media stream with the given ID and tracks.

§Parameters
  • stream_id - A unique identifier for this stream
  • tracks - A vector of tracks to add to the stream
§Specification

See MediaStream constructor.

§Examples
use rtc::media_stream::{MediaStream, MediaStreamId};
use rtc::media_stream::MediaStreamTrack;
use rtc::rtp_transceiver::rtp_sender::{RTCRtpCodec, RtpCodecKind};
use rtc::rtp_transceiver::rtp_sender::{RTCRtpEncodingParameters, RTCRtpCodingParameters};

let track = MediaStreamTrack::new(
    "stream-1".to_string(),
    "track-1".to_string(),
    "Microphone".to_string(),
    RtpCodecKind::Audio,
    vec![RTCRtpEncodingParameters {
        rtp_coding_parameters: RTCRtpCodingParameters {
            ssrc: Some(12345),
            ..Default::default()
        },
        codec: RTCRtpCodec::default(),
        ..Default::default()
    }],
);

let stream = MediaStream::new("stream-1".to_string(), vec![track]);
Source

pub fn stream_id(&self) -> &MediaStreamId

Returns the unique identifier of this stream.

The identifier is a 36-character Universally Unique Identifier (UUID) generated when the stream is created.

§Specification

See MediaStream.id.

Source

pub fn active(&self) -> bool

Returns whether this stream is active.

A stream is active if it has at least one track that is not in the “ended” state.

§Specification

See MediaStream.active.

Source

pub fn get_audio_tracks(&self) -> impl Iterator<Item = &MediaStreamTrack>

Returns an iterator over all audio tracks in this stream.

§Specification

See MediaStream.getAudioTracks().

§Examples
for track in stream.get_audio_tracks() {
    println!("Audio track: {} ({})", track.label(), track.track_id());
}
Source

pub fn get_audio_tracks_mut( &mut self, ) -> impl Iterator<Item = &mut MediaStreamTrack>

Returns a mutable iterator over all audio tracks in this stream.

§Specification

See MediaStream.getAudioTracks().

Source

pub fn get_video_tracks(&self) -> impl Iterator<Item = &MediaStreamTrack>

Returns an iterator over all video tracks in this stream.

§Specification

See MediaStream.getVideoTracks().

§Examples
for track in stream.get_video_tracks() {
    println!("Video track: {} ({})", track.label(), track.track_id());
}
Source

pub fn get_video_tracks_mut( &mut self, ) -> impl Iterator<Item = &mut MediaStreamTrack>

Returns a mutable iterator over all video tracks in this stream.

§Specification

See MediaStream.getVideoTracks().

Source

pub fn get_tracks(&self) -> impl Iterator<Item = &MediaStreamTrack>

Returns an iterator over all tracks in this stream.

§Specification

See MediaStream.getTracks().

§Examples
println!("Stream has {} tracks", stream.get_tracks().count());
Source

pub fn get_tracks_mut(&mut self) -> impl Iterator<Item = &mut MediaStreamTrack>

Returns a mutable iterator over all tracks in this stream.

§Specification

See MediaStream.getTracks().

Source

pub fn get_track_by_id( &self, track_id: &MediaStreamTrackId, ) -> Option<&MediaStreamTrack>

Returns a reference to the track with the specified ID, if it exists.

§Parameters
  • track_id - The unique identifier of the track to retrieve
§Returns

Returns Some(&MediaStreamTrack) if a track with the given ID exists, or None otherwise.

§Specification

See MediaStream.getTrackById().

§Examples
if let Some(track) = stream.get_track_by_id(&"track-id".to_string()) {
    println!("Found track: {}", track.label());
} else {
    println!("Track not found");
}
Source

pub fn get_track_by_id_mut( &mut self, track_id: &MediaStreamTrackId, ) -> Option<&mut MediaStreamTrack>

Returns a mutable reference to the track with the specified ID, if it exists.

§Parameters
  • track_id - The unique identifier of the track to retrieve
§Returns

Returns Some(&mut MediaStreamTrack) if a track with the given ID exists, or None otherwise.

§Specification

See MediaStream.getTrackById().

Source

pub fn add_track(&mut self, track: MediaStreamTrack)

Adds a track to this stream.

If a track with the same ID already exists, it will be replaced.

§Parameters
  • track - The track to add to the stream
§Specification

See MediaStream.addTrack().

§Examples
let mut stream = MediaStream::new("stream-id".to_string(), vec![]);

let track = MediaStreamTrack::new(
    "stream-id".to_string(),
    "track-id".to_string(),
    "Microphone".to_string(),
    RtpCodecKind::Audio,
    vec![RTCRtpEncodingParameters {
        rtp_coding_parameters: RTCRtpCodingParameters {
            ssrc: Some(12345),
            ..Default::default()
        },
        codec: RTCRtpCodec::default(),
        ..Default::default()
    }],
);

stream.add_track(track);
assert_eq!(stream.get_tracks().count(), 1);
Source

pub fn remove_track( &mut self, track_id: &MediaStreamTrackId, ) -> Option<MediaStreamTrack>

Removes a track from this stream and returns it.

§Parameters
  • track_id - The unique identifier of the track to remove
§Returns

Returns Some(MediaStreamTrack) if the track was found and removed, or None if no track with the given ID exists.

§Specification

See MediaStream.removeTrack().

§Examples
let removed_track = stream.remove_track(&"track-id".to_string());
assert!(removed_track.is_some());

Trait Implementations§

Source§

impl Clone for MediaStream

Source§

fn clone(&self) -> MediaStream

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

impl Debug for MediaStream

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for MediaStream

Source§

fn default() -> MediaStream

Returns the “default value” for a type. 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> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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.

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> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
Source§

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

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

Source§

fn vzip(self) -> V