Skip to main content

Module negotiation

Module negotiation 

Source
Expand description

producer and consumer RTP negotiation

Producer parameters are first normalized against router capabilities. The consumer is then negotiated from that router-visible stream

§Examples

let producer = MediaStream::new(
    vec![
        MediaFormat::new(MediaKind::Video, CodecName::Rtx, PayloadType::new(97), VIDEO_CLOCK_RATE_HZ)
            .with_parameter(fmtp::RTX_ASSOCIATION, "96"),
        MediaFormat::new(MediaKind::Video, CodecName::Vp8, PayloadType::new(96), VIDEO_CLOCK_RATE_HZ)
            .with_rtcp_feedback(RtcpFeedback::new(RtcpFeedbackKind::Nack, None)),
    ],
    vec![],
    vec![],
);
let router = MediaCapabilities::new(
    vec![
        MediaCodecCapability::new(MediaKind::Video, CodecName::Vp8, VIDEO_CLOCK_RATE_HZ)
            .with_payload_type(PayloadType::new(100))
            .with_rtcp_feedback(RtcpFeedback::new(RtcpFeedbackKind::Nack, None)),
        MediaCodecCapability::new(MediaKind::Video, CodecName::Rtx, VIDEO_CLOCK_RATE_HZ)
            .with_payload_type(PayloadType::new(101))
            .with_parameter(fmtp::RTX_ASSOCIATION, "100"),
    ],
    vec![],
);
let consumer = MediaCapabilities::new(
    vec![
        MediaCodecCapability::new(MediaKind::Video, CodecName::Vp8, VIDEO_CLOCK_RATE_HZ)
            .with_rtcp_feedback(RtcpFeedback::new(RtcpFeedbackKind::Nack, None)),
        MediaCodecCapability::new(MediaKind::Video, CodecName::Rtx, VIDEO_CLOCK_RATE_HZ)
            .with_parameter(fmtp::RTX_ASSOCIATION, "100"),
    ],
    vec![],
);

let consumable = derive_consumable_rtp_parameters(&producer, &router)?;
let negotiated = negotiate_consumer_rtp_parameters(&consumable, &consumer)?;

assert_eq!(
    consumable
        .formats()
        .map(|format| (
            format.codec_name(),
            format.payload_type(),
            format.rtx_associated_payload_type(),
        ))
        .collect::<Vec<_>>(),
    vec![(codec_name::VP8, 100, None), (codec_name::RTX, 101, Some(100))],
);
assert_eq!(negotiated, consumable);

Enums§

RtpNegotiationError
Failure raised while deriving or negotiating RTP parameters.

Functions§

can_consume
Check whether a consumer capability set can negotiate at least one media codec.
derive_consumable_rtp_parameters
Derives the router-consumable media stream from producer parameters.
negotiate_consumer_rtp_parameters
Negotiates the consumer-facing stream from a consumable stream.