from dataclasses import dataclass, field from typing import Dict, List, Optional, Union ParametersDict = Dict[str, Union[int, str, None]] @dataclass class RTCRtpCodecCapability: """ The :class:`RTCRtpCodecCapability` dictionary provides information on codec capabilities. """ mimeType: str "The codec MIME media type/subtype, for instance `'audio/PCMU'`." clockRate: int "The codec clock rate expressed in Hertz." channels: Optional[int] = None "The number of channels supported (e.g. two for stereo)." parameters: ParametersDict = field(default_factory=dict) "Codec-specific parameters available for signaling." @property def name(self): return self.mimeType.split("/")[1] @dataclass class RTCRtpCodecParameters: """ The :class:`RTCRtpCodecParameters` dictionary provides information on codec settings. """ mimeType: str "The codec MIME media type/subtype, for instance `'audio/PCMU'`." clockRate: int "The codec clock rate expressed in Hertz." channels: Optional[int] = None "The number of channels supported (e.g. two for stereo)." payloadType: Optional[int] = None "The value that goes in the RTP Payload Type Field." rtcpFeedback: List["RTCRtcpFeedback"] = field(default_factory=list) "Transport layer and codec-specific feedback messages for this codec." parameters: ParametersDict = field(default_factory=dict) "Codec-specific parameters available for signaling." @property def name(self): return self.mimeType.split("/")[1] def __str__(self): s = f"{self.name}/{self.clockRate}" if self.channels == 2: s += "/2" return s @dataclass class RTCRtpRtxParameters: ssrc: int @dataclass class RTCRtpCodingParameters: ssrc: int payloadType: int rtx: Optional[RTCRtpRtxParameters] = None class RTCRtpDecodingParameters(RTCRtpCodingParameters): pass class RTCRtpEncodingParameters(RTCRtpCodingParameters): pass @dataclass class RTCRtpHeaderExtensionCapability: """ The :class:`RTCRtpHeaderExtensionCapability` dictionary provides information on a supported header extension. """ uri: str "The URI of the RTP header extension." @dataclass class RTCRtpHeaderExtensionParameters: """ The :class:`RTCRtpHeaderExtensionParameters` dictionary enables a header extension to be configured for use within an :class:`RTCRtpSender` or :class:`RTCRtpReceiver`. """ id: int "The value that goes in the packet." uri: str "The URI of the RTP header extension." @dataclass class RTCRtpCapabilities: """ The :class:`RTCRtpCapabilities` dictionary provides information about support codecs and header extensions. """ codecs: List[RTCRtpCodecCapability] = field(default_factory=list) "A list of :class:`RTCRtpCodecCapability`." headerExtensions: List[RTCRtpHeaderExtensionCapability] = field( default_factory=list ) "A list of :class:`RTCRtpHeaderExtensionCapability`." @dataclass class RTCRtcpFeedback: """ The :class:`RTCRtcpFeedback` dictionary provides information on RTCP feedback messages. """ type: str parameter: Optional[str] = None @dataclass class RTCRtcpParameters: """ The :class:`RTCRtcpParameters` dictionary provides information on RTCP settings. """ cname: Optional[str] = None "The Canonical Name (CNAME) used by RTCP." mux: bool = False "Whether RTP and RTCP are multiplexed." ssrc: Optional[int] = None "The Synchronization Source identifier." @dataclass class RTCRtpParameters: """ The :class:`RTCRtpParameters` dictionary describes the configuration of an :class:`RTCRtpReceiver` or an :class:`RTCRtpSender`. """ codecs: List[RTCRtpCodecParameters] = field(default_factory=list) "A list of :class:`RTCRtpCodecParameters` to send or receive." headerExtensions: List[RTCRtpHeaderExtensionParameters] = field( default_factory=list ) "A list of :class:`RTCRtpHeaderExtensionParameters`." muxId: str = "" "The muxId assigned to the RTP stream, if any, empty string if unset." rtcp: RTCRtcpParameters = field(default_factory=RTCRtcpParameters) "Parameters to configure RTCP." @dataclass class RTCRtpReceiveParameters(RTCRtpParameters): encodings: List[RTCRtpDecodingParameters] = field(default_factory=list) @dataclass class RTCRtpSendParameters(RTCRtpParameters): encodings: List[RTCRtpEncodingParameters] = field(default_factory=list)