Skip to content

Commit

Permalink
[sdp] use regular dict instead of OrderedDict for codec parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
jlaine committed Mar 15, 2022
1 parent 9b05a15 commit b0c7f18
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 51 deletions.
20 changes: 9 additions & 11 deletions 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,
Expand Down Expand Up @@ -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

Expand All @@ -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
Expand All @@ -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,
},
)


Expand Down
3 changes: 1 addition & 2 deletions src/aiortc/rtcpeerconnection.py
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down
9 changes: 5 additions & 4 deletions 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
Expand All @@ -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
Expand All @@ -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
Expand Down
8 changes: 4 additions & 4 deletions src/aiortc/sdp.py
@@ -1,14 +1,14 @@
import enum
import ipaddress
import re
from collections import OrderedDict
from dataclasses import dataclass
from typing import Any, Dict, List, Optional, Tuple, Union

from . import rtp
from .rtcdtlstransport import RTCDtlsFingerprint, RTCDtlsParameters
from .rtcicetransport import RTCIceCandidate, RTCIceParameters
from .rtcrtpparameters import (
ParametersDict,
RTCRtcpFeedback,
RTCRtpCodecParameters,
RTCRtpHeaderExtensionParameters,
Expand Down Expand Up @@ -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)
Expand All @@ -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:
Expand Down
25 changes: 10 additions & 15 deletions 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

Expand Down Expand Up @@ -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",
},
),
],
)
Expand Down
25 changes: 10 additions & 15 deletions 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
Expand Down Expand Up @@ -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",
},
),
],
)
Expand Down

0 comments on commit b0c7f18

Please sign in to comment.