@@ -558,7 +558,7 @@ defmodule ExWebRTC.RTPTransceiver do
558
558
else: transceiver . sender . codecs
559
559
560
560
get_sender_attrs (
561
- transceiver . sender . track ,
561
+ transceiver . sender ,
562
562
codecs ,
563
563
transceiver . sender . ssrc ,
564
564
transceiver . sender . rtx_ssrc
@@ -577,11 +577,11 @@ defmodule ExWebRTC.RTPTransceiver do
577
577
end
578
578
579
579
@ doc false
580
- defp get_sender_attrs ( track , codecs , ssrc , rtx_ssrc ) do
580
+ defp get_sender_attrs ( sender , codecs , ssrc , rtx_ssrc ) do
581
581
# According to RFC 8829 sec. 5.2.1, track IDs should not be included.
582
582
# However, most browsers support track IDs in MSID. We will follow this practice.
583
583
msid_attrs =
584
- case track do
584
+ case sender . track do
585
585
% MediaStreamTrack { streams: streams , id: id } when streams != [ ] ->
586
586
Enum . map ( streams , & ExSDP.Attribute.MSID . new ( & 1 , id ) )
587
587
@@ -594,26 +594,26 @@ defmodule ExWebRTC.RTPTransceiver do
594
594
[ ]
595
595
end
596
596
597
- ssrc_attrs = get_ssrc_attrs ( codecs , ssrc , rtx_ssrc , track )
597
+ ssrc_attrs = get_ssrc_attrs ( codecs , ssrc , rtx_ssrc , sender )
598
598
599
599
msid_attrs ++ ssrc_attrs
600
600
end
601
601
602
- defp get_ssrc_attrs ( codecs , ssrc , rtx_ssrc , track ) do
602
+ defp get_ssrc_attrs ( codecs , ssrc , rtx_ssrc , sender ) do
603
603
codec = Enum . any? ( codecs , fn codec -> not String . ends_with? ( codec . mime_type , "/rtx" ) end )
604
604
rtx_codec = Enum . any? ( codecs , fn codec -> String . ends_with? ( codec . mime_type , "/rtx" ) end )
605
605
606
- do_get_ssrc_attrs ( codec , rtx_codec , ssrc , rtx_ssrc , track )
606
+ do_get_ssrc_attrs ( codec , rtx_codec , ssrc , rtx_ssrc , sender )
607
607
end
608
608
609
609
# we didn't manage to negotiate any codec
610
- defp do_get_ssrc_attrs ( false , _rtx_codec , _ssrc , _rtx_ssrc , _track ) do
610
+ defp do_get_ssrc_attrs ( false , _rtx_codec , _ssrc , _rtx_ssrc , _sender ) do
611
611
[ ]
612
612
end
613
613
614
614
# we have a codec but not rtx codec
615
- defp do_get_ssrc_attrs ( _codec , false , ssrc , _rtx_ssrc , track ) do
616
- case track do
615
+ defp do_get_ssrc_attrs ( _codec , false , ssrc , _rtx_ssrc , sender ) do
616
+ case sender . track do
617
617
% MediaStreamTrack { streams: streams , id: id } when streams != [ ] ->
618
618
Enum . map ( streams , fn stream ->
619
619
% ExSDP.Attribute.SSRC { id: ssrc , attribute: "msid" , value: "#{ stream } #{ id } " }
@@ -623,16 +623,18 @@ defmodule ExWebRTC.RTPTransceiver do
623
623
[ % ExSDP.Attribute.SSRC { id: ssrc , attribute: "msid" , value: "- #{ id } " } ]
624
624
625
625
nil ->
626
- [ % ExSDP.Attribute.SSRC { id: ssrc , attribute: "msid" , value: "- -" } ]
626
+ # If the track_id is missing, we will default to using the sender_id, following Chromium's approach:
627
+ # See: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/pc/sdp_offer_answer.cc;l=739;drc=b8b5768e5d0d1c2a84fe4896eae884d97fd1131e;bpv=1;bpt=1
628
+ [ % ExSDP.Attribute.SSRC { id: ssrc , attribute: "msid" , value: "- #{ sender . id } " } ]
627
629
end
628
630
end
629
631
630
632
# we have both codec and rtx codec
631
- defp do_get_ssrc_attrs ( _codec , _rtx_codec , ssrc , rtx_ssrc , track ) do
633
+ defp do_get_ssrc_attrs ( _codec , _rtx_codec , ssrc , rtx_ssrc , sender ) do
632
634
fid = % ExSDP.Attribute.SSRCGroup { semantics: "FID" , ssrcs: [ ssrc , rtx_ssrc ] }
633
635
634
636
ssrc_attrs =
635
- case track do
637
+ case sender . track do
636
638
% MediaStreamTrack { streams: streams , id: id } when streams != [ ] ->
637
639
{ ssrc_attrs , rtx_ssrc_attrs } =
638
640
Enum . reduce ( streams , { [ ] , [ ] } , fn stream , { ssrc_attrs , rtx_ssrc_attrs } ->
@@ -662,8 +664,8 @@ defmodule ExWebRTC.RTPTransceiver do
662
664
663
665
nil ->
664
666
[
665
- % ExSDP.Attribute.SSRC { id: ssrc , attribute: "msid" , value: "- - " } ,
666
- % ExSDP.Attribute.SSRC { id: rtx_ssrc , attribute: "msid" , value: "- - " }
667
+ % ExSDP.Attribute.SSRC { id: ssrc , attribute: "msid" , value: "- #{ sender . id } " } ,
668
+ % ExSDP.Attribute.SSRC { id: rtx_ssrc , attribute: "msid" , value: "- #{ sender . id } " }
667
669
]
668
670
end
669
671
0 commit comments