rtp_parse/rtcp/
rtcp_fb_pli.rs

1use anyhow::{Context, Result};
2
3use crate::{PacketBuffer, PacketBufferMut};
4
5use super::{
6    rtcp_fb_header::{write_rtcp_fb_header, RtcpFbHeader},
7    rtcp_header::{write_rtcp_header, RtcpHeader},
8};
9use bit_cursor::nsw_types::u5;
10
11///
12/// https://tools.ietf.org/html/rfc4585#section-6.3.1
13///
14/// PLI does not require parameters.  Therefore, the length field MUST be
15///  2, and there MUST NOT be any Feedback Control Information.
16#[derive(Debug)]
17pub struct RtcpFbPliPacket {
18    pub header: RtcpHeader,
19    pub fb_header: RtcpFbHeader,
20}
21
22impl RtcpFbPliPacket {
23    pub const FMT: u5 = u5::new(1);
24}
25
26pub fn read_rtcp_fb_pli<B: PacketBuffer>(
27    _buf: &mut B,
28    header: RtcpHeader,
29    fb_header: RtcpFbHeader,
30) -> Result<RtcpFbPliPacket> {
31    Ok(RtcpFbPliPacket { header, fb_header })
32}
33
34pub fn write_rtcp_fb_pli<B: PacketBufferMut>(buf: &mut B, fb_pli: &RtcpFbPliPacket) -> Result<()> {
35    write_rtcp_header(buf, &fb_pli.header).context("rtcp header")?;
36    write_rtcp_fb_header(buf, &fb_pli.fb_header).context("fb header")?;
37
38    Ok(())
39}