xref: /webrtc/rtcp/src/lib.rs (revision 5b79f08a)
1*ffe74184SMartin Algesten #![warn(rust_2018_idioms)]
2*ffe74184SMartin Algesten #![allow(dead_code)]
3*ffe74184SMartin Algesten 
4*ffe74184SMartin Algesten //! Package rtcp implements encoding and decoding of RTCP packets according to RFCs 3550 and 5506.
5*ffe74184SMartin Algesten //!
6*ffe74184SMartin Algesten //! RTCP is a sister protocol of the Real-time Transport Protocol (RTP). Its basic functionality
7*ffe74184SMartin Algesten //! and packet structure is defined in RFC 3550. RTCP provides out-of-band statistics and control
8*ffe74184SMartin Algesten //! information for an RTP session. It partners with RTP in the delivery and packaging of multimedia data,
9*ffe74184SMartin Algesten //! but does not transport any media data itself.
10*ffe74184SMartin Algesten //!
11*ffe74184SMartin Algesten //! The primary function of RTCP is to provide feedback on the quality of service (QoS)
12*ffe74184SMartin Algesten //! in media distribution by periodically sending statistics information such as transmitted octet
13*ffe74184SMartin Algesten //! and packet counts, packet loss, packet delay variation, and round-trip delay time to participants
14*ffe74184SMartin Algesten //! in a streaming multimedia session. An application may use this information to control quality of
15*ffe74184SMartin Algesten //! service parameters, perhaps by limiting flow, or using a different codec.
16*ffe74184SMartin Algesten //!
17*ffe74184SMartin Algesten //! Decoding RTCP packets:
18*ffe74184SMartin Algesten //!```nobuild
19*ffe74184SMartin Algesten //!     let pkt = rtcp::unmarshal(&rtcp_data).unwrap();
20*ffe74184SMartin Algesten //!
21*ffe74184SMartin Algesten //!     if let Some(e) = pkt
22*ffe74184SMartin Algesten //!          .as_any()
23*ffe74184SMartin Algesten //!          .downcast_ref::<PictureLossIndication>()
24*ffe74184SMartin Algesten //!      {
25*ffe74184SMartin Algesten //!
26*ffe74184SMartin Algesten //!      }
27*ffe74184SMartin Algesten //!     else if let Some(e) = packet
28*ffe74184SMartin Algesten //!          .as_any()
29*ffe74184SMartin Algesten //!          .downcast_ref::<Goodbye>(){}
30*ffe74184SMartin Algesten //!     ....
31*ffe74184SMartin Algesten //!```
32*ffe74184SMartin Algesten //!
33*ffe74184SMartin Algesten //! Encoding RTCP packets:
34*ffe74184SMartin Algesten //!```nobuild
35*ffe74184SMartin Algesten //!     let pkt = PictureLossIndication{
36*ffe74184SMartin Algesten //!         sender_ssrc: sender_ssrc,
37*ffe74184SMartin Algesten //!         media_ssrc: media_ssrc
38*ffe74184SMartin Algesten //!     };
39*ffe74184SMartin Algesten //!
40*ffe74184SMartin Algesten //!     let pli_data = pkt.marshal().unwrap();
41*ffe74184SMartin Algesten //!     // ...
42*ffe74184SMartin Algesten //!```
43*ffe74184SMartin Algesten 
44*ffe74184SMartin Algesten pub mod compound_packet;
45*ffe74184SMartin Algesten mod error;
46*ffe74184SMartin Algesten pub mod extended_report;
47*ffe74184SMartin Algesten pub mod goodbye;
48*ffe74184SMartin Algesten pub mod header;
49*ffe74184SMartin Algesten pub mod packet;
50*ffe74184SMartin Algesten pub mod payload_feedbacks;
51*ffe74184SMartin Algesten pub mod raw_packet;
52*ffe74184SMartin Algesten pub mod receiver_report;
53*ffe74184SMartin Algesten pub mod reception_report;
54*ffe74184SMartin Algesten pub mod sender_report;
55*ffe74184SMartin Algesten pub mod source_description;
56*ffe74184SMartin Algesten pub mod transport_feedbacks;
57*ffe74184SMartin Algesten mod util;
58*ffe74184SMartin Algesten 
59*ffe74184SMartin Algesten pub use error::Error;
60