1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//! Remote Media Stream Tracks
//!
//! This module provides the [`TrackRemote`](crate::media_stream::track_remote::TrackRemote) trait and the [`TrackRemoteEvent`](crate::media_stream::track_remote::TrackRemoteEvent) enum, which represent
//! a media track received from a remote peer.
//!
//! # Concepts
//!
//! * **[`TrackRemote`](crate::media_stream::track_remote::TrackRemote)**: A track representing incoming media. It is received via the
//! [`PeerConnectionEventHandler::on_track`](crate::peer_connection::PeerConnectionEventHandler::on_track) callback.
//! * **Event Polling**: Incoming RTP packets, RTCP packets, and track lifecycle events (such as mute, unmute,
//! or closing) are fetched by calling the asynchronous [`TrackRemote::poll`](crate::media_stream::track_remote::TrackRemote::poll) method in a loop.
//!
//! # Examples
//!
//! ## Reading Incoming RTP Packets
//!
//! ```no_run
//! # use webrtc::media_stream::track_remote::{TrackRemote, TrackRemoteEvent};
//! # use std::sync::Arc;
//! # async fn handle_remote_track(track: Arc<dyn TrackRemote>) {
//! while let Some(event) = track.poll().await {
//! match event {
//! TrackRemoteEvent::OnRtpPacket(pkt) => {
//! println!("Received RTP packet: sequence_number={}", pkt.header.sequence_number);
//! // Process/decode the RTP payload
//! }
//! TrackRemoteEvent::OnEnded => {
//! println!("Remote track ended");
//! break;
//! }
//! _ => {}
//! }
//! }
//! # }
//! ```
pub
use crateResult;
use crateTrack;
use RTCTrackEventInit;
use ;
/// Events that can occur on a [`TrackRemote`].
/// A remote media track received from a remote peer.
///
/// This trait provides the interface for reading incoming RTP/RTCP packets
/// and sending RTCP feedback (such as PLI, SLI, or NACK) back to the sender.