From b0c7f1845626c66824901fd2882d8ce0f3f901ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Tue, 15 Mar 2022 01:24:08 +0100 Subject: [PATCH] [sdp] use regular dict instead of OrderedDict for codec parameters --- src/aiortc/codecs/__init__.py | 20 +++++++++----------- src/aiortc/rtcpeerconnection.py | 3 +-- src/aiortc/rtcrtpparameters.py | 9 +++++---- src/aiortc/sdp.py | 8 ++++---- tests/test_rtcrtpreceiver.py | 25 ++++++++++--------------- tests/test_rtcrtpsender.py | 25 ++++++++++--------------- 6 files changed, 39 insertions(+), 51 deletions(-) diff --git a/src/aiortc/codecs/__init__.py b/src/aiortc/codecs/__init__.py index 0e2fd7ddb..a512939b9 100644 --- a/src/aiortc/codecs/__init__.py +++ b/src/aiortc/codecs/__init__.py @@ -1,7 +1,7 @@ -from collections import OrderedDict from typing import Dict, List, Optional, Union from ..rtcrtpparameters import ( + ParametersDict, RTCRtcpFeedback, RTCRtpCapabilities, RTCRtpCodecCapability, @@ -56,7 +56,7 @@ def init_codecs() -> None: dynamic_pt = 97 def add_video_codec( - mimeType: str, parameters: Optional[OrderedDict] = None + mimeType: str, parameters: Optional[ParametersDict] = None ) -> None: nonlocal dynamic_pt @@ -71,13 +71,13 @@ def add_video_codec( RTCRtcpFeedback(type="nack", parameter="pli"), RTCRtcpFeedback(type="goog-remb"), ], - parameters=parameters or OrderedDict(), + parameters=parameters or {}, ), RTCRtpCodecParameters( mimeType="video/rtx", clockRate=clockRate, payloadType=dynamic_pt + 1, - parameters=OrderedDict([("apt", dynamic_pt)]), + parameters={"apt": dynamic_pt}, ), ] dynamic_pt += 2 @@ -86,13 +86,11 @@ def add_video_codec( for profile_level_id in ("42001f", "42e01f"): add_video_codec( "video/H264", - OrderedDict( - ( - ("level-asymmetry-allowed", "1"), - ("packetization-mode", "1"), - ("profile-level-id", profile_level_id), - ) - ), + { + "level-asymmetry-allowed": "1", + "packetization-mode": "1", + "profile-level-id": profile_level_id, + }, ) diff --git a/src/aiortc/rtcpeerconnection.py b/src/aiortc/rtcpeerconnection.py index 7239a9d11..8021a4cd3 100644 --- a/src/aiortc/rtcpeerconnection.py +++ b/src/aiortc/rtcpeerconnection.py @@ -2,7 +2,6 @@ import copy import logging import uuid -from collections import OrderedDict from typing import Dict, List, Optional, Set, Union from pyee.asyncio import AsyncIOEventEmitter @@ -1117,7 +1116,7 @@ def __remoteRtp(self, transceiver: RTCRtpTransceiver) -> RTCRtpReceiveParameters rtcp=media.rtp.rtcp, ) if len(media.ssrc): - encodings: OrderedDict[int, RTCRtpDecodingParameters] = OrderedDict() + encodings: Dict[int, RTCRtpDecodingParameters] = {} for codec in transceiver._codecs: if is_rtx(codec): if codec.parameters["apt"] in encodings and len(media.ssrc) == 2: diff --git a/src/aiortc/rtcrtpparameters.py b/src/aiortc/rtcrtpparameters.py index bdb884bdb..bfc211dfa 100644 --- a/src/aiortc/rtcrtpparameters.py +++ b/src/aiortc/rtcrtpparameters.py @@ -1,6 +1,7 @@ -from collections import OrderedDict from dataclasses import dataclass, field -from typing import List, Optional +from typing import Dict, List, Optional, Union + +ParametersDict = Dict[str, Union[int, str, None]] @dataclass @@ -16,7 +17,7 @@ class RTCRtpCodecCapability: "The codec clock rate expressed in Hertz." channels: Optional[int] = None "The number of channels supported (e.g. two for stereo)." - parameters: OrderedDict = field(default_factory=OrderedDict) + parameters: ParametersDict = field(default_factory=dict) "Codec-specific parameters available for signaling." @property @@ -41,7 +42,7 @@ class RTCRtpCodecParameters: "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: OrderedDict = field(default_factory=OrderedDict) + parameters: ParametersDict = field(default_factory=dict) "Codec-specific parameters available for signaling." @property diff --git a/src/aiortc/sdp.py b/src/aiortc/sdp.py index 3e0d6cc34..d0fe05760 100644 --- a/src/aiortc/sdp.py +++ b/src/aiortc/sdp.py @@ -1,7 +1,6 @@ import enum import ipaddress import re -from collections import OrderedDict from dataclasses import dataclass from typing import Any, Dict, List, Optional, Tuple, Union @@ -9,6 +8,7 @@ from .rtcdtlstransport import RTCDtlsFingerprint, RTCDtlsParameters from .rtcicetransport import RTCIceCandidate, RTCIceParameters from .rtcrtpparameters import ( + ParametersDict, RTCRtcpFeedback, RTCRtpCodecParameters, RTCRtpHeaderExtensionParameters, @@ -159,8 +159,8 @@ def ipaddress_to_sdp(addr: str) -> str: return f"IN IP{version} {addr}" -def parameters_from_sdp(sdp: str) -> OrderedDict: - parameters: OrderedDict = OrderedDict() +def parameters_from_sdp(sdp: str) -> ParametersDict: + parameters: ParametersDict = {} for param in sdp.split(";"): if "=" in param: k, v = param.split("=", 1) @@ -173,7 +173,7 @@ def parameters_from_sdp(sdp: str) -> OrderedDict: return parameters -def parameters_to_sdp(parameters: OrderedDict) -> str: +def parameters_to_sdp(parameters: ParametersDict) -> str: params = [] for param_k, param_v in parameters.items(): if param_v is not None: diff --git a/tests/test_rtcrtpreceiver.py b/tests/test_rtcrtpreceiver.py index 48615a48b..e43e14a04 100644 --- a/tests/test_rtcrtpreceiver.py +++ b/tests/test_rtcrtpreceiver.py @@ -1,7 +1,6 @@ import asyncio import contextlib import fractions -from collections import OrderedDict from unittest import TestCase from unittest.mock import patch @@ -266,24 +265,20 @@ def test_capabilities(self): RTCRtpCodecCapability( mimeType="video/H264", clockRate=90000, - parameters=OrderedDict( - [ - ("level-asymmetry-allowed", "1"), - ("packetization-mode", "1"), - ("profile-level-id", "42001f"), - ] - ), + parameters={ + "level-asymmetry-allowed": "1", + "packetization-mode": "1", + "profile-level-id": "42001f", + }, ), RTCRtpCodecCapability( mimeType="video/H264", clockRate=90000, - parameters=OrderedDict( - [ - ("level-asymmetry-allowed", "1"), - ("packetization-mode", "1"), - ("profile-level-id", "42e01f"), - ] - ), + parameters={ + "level-asymmetry-allowed": "1", + "packetization-mode": "1", + "profile-level-id": "42e01f", + }, ), ], ) diff --git a/tests/test_rtcrtpsender.py b/tests/test_rtcrtpsender.py index f808244f8..c3b75138e 100644 --- a/tests/test_rtcrtpsender.py +++ b/tests/test_rtcrtpsender.py @@ -1,5 +1,4 @@ import asyncio -from collections import OrderedDict from struct import pack from unittest import TestCase from unittest.mock import patch @@ -86,24 +85,20 @@ def test_capabilities(self): RTCRtpCodecCapability( mimeType="video/H264", clockRate=90000, - parameters=OrderedDict( - [ - ("level-asymmetry-allowed", "1"), - ("packetization-mode", "1"), - ("profile-level-id", "42001f"), - ] - ), + parameters={ + "level-asymmetry-allowed": "1", + "packetization-mode": "1", + "profile-level-id": "42001f", + }, ), RTCRtpCodecCapability( mimeType="video/H264", clockRate=90000, - parameters=OrderedDict( - [ - ("level-asymmetry-allowed", "1"), - ("packetization-mode", "1"), - ("profile-level-id", "42e01f"), - ] - ), + parameters={ + "level-asymmetry-allowed": "1", + "packetization-mode": "1", + "profile-level-id": "42e01f", + }, ), ], )