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
impl MediaStream
Sourcepub fn new(stream_id: MediaStreamId, tracks: Vec<MediaStreamTrack>) -> Self
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 streamtracks- A vector of tracks to add to the stream
§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-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]);Sourcepub fn stream_id(&self) -> &MediaStreamId
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.
Sourcepub fn active(&self) -> bool
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.
Sourcepub fn get_audio_tracks(&self) -> impl Iterator<Item = &MediaStreamTrack>
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());
}Sourcepub fn get_audio_tracks_mut(
&mut self,
) -> impl Iterator<Item = &mut MediaStreamTrack>
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
Sourcepub fn get_video_tracks(&self) -> impl Iterator<Item = &MediaStreamTrack>
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());
}Sourcepub fn get_video_tracks_mut(
&mut self,
) -> impl Iterator<Item = &mut MediaStreamTrack>
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
Sourcepub fn get_tracks(&self) -> impl Iterator<Item = &MediaStreamTrack>
pub fn get_tracks(&self) -> impl Iterator<Item = &MediaStreamTrack>
Sourcepub fn get_tracks_mut(&mut self) -> impl Iterator<Item = &mut MediaStreamTrack>
pub fn get_tracks_mut(&mut self) -> impl Iterator<Item = &mut MediaStreamTrack>
Returns a mutable iterator over all tracks in this stream.
§Specification
Sourcepub fn get_track_by_id(
&self,
track_id: &MediaStreamTrackId,
) -> Option<&MediaStreamTrack>
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");
}Sourcepub fn get_track_by_id_mut(
&mut self,
track_id: &MediaStreamTrackId,
) -> Option<&mut MediaStreamTrack>
pub fn get_track_by_id_mut( &mut self, track_id: &MediaStreamTrackId, ) -> Option<&mut MediaStreamTrack>
Sourcepub fn add_track(&mut self, track: MediaStreamTrack)
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
§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);Sourcepub fn remove_track(
&mut self,
track_id: &MediaStreamTrackId,
) -> Option<MediaStreamTrack>
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
impl Clone for MediaStream
Source§fn clone(&self) -> MediaStream
fn clone(&self) -> MediaStream
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MediaStream
impl Debug for MediaStream
Source§impl Default for MediaStream
impl Default for MediaStream
Source§fn default() -> MediaStream
fn default() -> MediaStream
Auto Trait Implementations§
impl Freeze for MediaStream
impl RefUnwindSafe for MediaStream
impl Send for MediaStream
impl Sync for MediaStream
impl Unpin for MediaStream
impl UnsafeUnpin for MediaStream
impl UnwindSafe for MediaStream
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.