pub(crate) mod generator;
pub(crate) mod receive_log;
pub(crate) mod responder;
pub(crate) mod send_buffer;
use crate::stream_info::StreamInfo;
pub(crate) fn stream_supports_nack(info: &StreamInfo) -> bool {
info.rtcp_feedback
.iter()
.any(|fb| fb.typ == "nack" && fb.parameter.is_empty())
}
#[cfg(test)]
mod tests {
use super::*;
use crate::stream_info::RTCPFeedback;
#[test]
fn test_stream_supports_nack() {
let info_with_nack = StreamInfo {
ssrc: 12345,
rtcp_feedback: vec![RTCPFeedback {
typ: "nack".to_string(),
parameter: "".to_string(),
}],
..Default::default()
};
assert!(stream_supports_nack(&info_with_nack));
let info_with_nack_pli = StreamInfo {
ssrc: 12345,
rtcp_feedback: vec![RTCPFeedback {
typ: "nack".to_string(),
parameter: "pli".to_string(),
}],
..Default::default()
};
assert!(!stream_supports_nack(&info_with_nack_pli));
let info_without_nack = StreamInfo {
ssrc: 12345,
rtcp_feedback: vec![RTCPFeedback {
typ: "goog-remb".to_string(),
parameter: "".to_string(),
}],
..Default::default()
};
assert!(!stream_supports_nack(&info_without_nack));
let info_no_feedback = StreamInfo {
ssrc: 12345,
rtcp_feedback: vec![],
..Default::default()
};
assert!(!stream_supports_nack(&info_no_feedback));
}
}