diff --git a/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c b/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c index a4e8a2d97c..b2d343f20e 100644 --- a/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c +++ b/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c @@ -3065,11 +3065,9 @@ _pick_rtx_payload_types (GstWebRTCBin * webrtc, WebRTCTransceiver * trans, { gboolean ret = TRUE; - if (trans->local_rtx_ssrc_map) - gst_structure_free (trans->local_rtx_ssrc_map); - - trans->local_rtx_ssrc_map = - gst_structure_new_empty ("application/x-rtp-ssrc-map"); + if (!trans->local_rtx_ssrc_map) + trans->local_rtx_ssrc_map = + gst_structure_new_empty ("application/x-rtp-ssrc-map"); if (trans->do_nack) { struct media_payload_map_item *item; @@ -3640,8 +3638,9 @@ sdp_media_from_transceiver (GstWebRTCBin * webrtc, GstSDPMedia * media, gst_clear_structure (&extmap); - { - const GstStructure *s = gst_caps_get_structure (caps, 0); + // create rtx entry for each format type + for (i = 0; i < gst_caps_get_size (caps); i++) { + const GstStructure *s = gst_caps_get_structure (caps, i); gint clockrate = -1; gint rtx_target_pt; guint rtx_target_ssrc = -1; diff --git a/subprojects/gst-plugins-bad/tests/check/elements/webrtcbin.c b/subprojects/gst-plugins-bad/tests/check/elements/webrtcbin.c index d1f661d4a9..c2bb5edf11 100644 --- a/subprojects/gst-plugins-bad/tests/check/elements/webrtcbin.c +++ b/subprojects/gst-plugins-bad/tests/check/elements/webrtcbin.c @@ -6510,7 +6510,8 @@ GST_START_TEST (test_video_rtx_no_duplicate_payloads) VAL_SDP_INIT (no_duplicate_payloads, on_sdp_media_no_duplicate_payloads, NULL, NULL); - guint media_format_count[] = { 3 }; + // two formats for VP8 and H264 and two for VP8-RTX + H264-RTX + guint media_format_count[] = { 4 }; VAL_SDP_INIT (media_formats, on_sdp_media_count_formats, media_format_count, &no_duplicate_payloads); VAL_SDP_INIT (count, _count_num_sdp_media, GUINT_TO_POINTER (1),