Skip to content

Commit eb898a4

Browse files
authored
Fix wrong header extension ids in locally munged SDP (#356)
- Fixes #354. - Rationale explained in detail in the issue.
1 parent 6d163a2 commit eb898a4

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

src/handlers/ortc/utils.ts

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,39 @@ export function addHeaderExtensionSupport(
3535
direction: RtpHeaderExtensionDirection;
3636
}
3737
): void {
38-
if (
39-
rtpCapabilities.headerExtensions?.some(
40-
exten =>
41-
exten.kind === headerExtension.kind && exten.uri === headerExtension.uri
42-
)
43-
) {
44-
return;
38+
let preferredId: number | undefined;
39+
40+
// Look for an already existing header extension with same `uri`. Don't
41+
// try to match `kind` since all media sections in a Bundle SDP must share
42+
// same `id` in extensions with same `uri` (as per spec). So if we are
43+
// adding an audio extension and there is already a video extension with
44+
// same `uri`, then reuse its preferred `id`.
45+
const existingHeaderExtension = rtpCapabilities.headerExtensions?.find(
46+
exten => exten.uri === headerExtension.uri
47+
);
48+
49+
if (existingHeaderExtension) {
50+
if (existingHeaderExtension.kind === headerExtension.kind) {
51+
return;
52+
} else {
53+
preferredId = existingHeaderExtension.preferredId;
54+
}
4555
}
4656

4757
if (!rtpCapabilities.headerExtensions) {
4858
rtpCapabilities.headerExtensions = [];
4959
}
5060

51-
const setPreferredIds = new Set(
52-
rtpCapabilities.headerExtensions
53-
.filter(exten => exten.uri !== headerExtension.uri)
54-
.map(exten => exten.preferredId)
55-
);
61+
if (preferredId === undefined) {
62+
preferredId = 1;
5663

57-
let preferredId: number = 1;
64+
const setPreferredIds = new Set(
65+
rtpCapabilities.headerExtensions.map(exten => exten.preferredId)
66+
);
5867

59-
while (setPreferredIds.has(preferredId)) {
60-
++preferredId;
68+
while (setPreferredIds.has(preferredId)) {
69+
++preferredId;
70+
}
6171
}
6272

6373
const newHeaderExtension = {

0 commit comments

Comments
 (0)