Skip to content

Commit 6f2e678

Browse files
philncadubentzen
authored andcommitted
[GStreamer][WebRTC] Minor improvements in incoming track processor
https://bugs.webkit.org/show_bug.cgi?id=276988 Reviewed by Xabier Rodriguez-Calvar. The msid information can be present in the pad caps, so when that's the case inspecting the SDP is not required. Also we now send the force-key-unit event only for video tracks. * Source/WebCore/platform/mediastream/gstreamer/GStreamerIncomingTrackProcessor.cpp: (WebCore::GStreamerIncomingTrackProcessor::configure): (WebCore::GStreamerIncomingTrackProcessor::incomingTrackProcessor): Canonical link: https://commits.webkit.org/281286@main
1 parent 084a422 commit 6f2e678

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

Source/WebCore/platform/mediastream/gstreamer/GStreamerIncomingTrackProcessor.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,20 @@ void GStreamerIncomingTrackProcessor::configure(GStreamerMediaEndpoint* endPoint
5353
m_data.caps = WTFMove(caps);
5454

5555
g_object_get(m_pad.get(), "transceiver", &m_data.transceiver.outPtr(), nullptr);
56-
retrieveMediaStreamAndTrackIdFromSDP();
56+
57+
auto structure = gst_caps_get_structure(m_data.caps.get(), 0);
58+
unsigned ssrc;
59+
if (gst_structure_get_uint(structure, "ssrc", &ssrc)) {
60+
auto msIdAttributeName = makeString("ssrc-"_s, ssrc, "-msid"_s);
61+
auto msIdAttribute = gst_structure_get_string(structure, msIdAttributeName.ascii().data());
62+
auto components = String::fromUTF8(msIdAttribute).split(' ');
63+
if (components.size() == 2)
64+
m_sdpMsIdAndTrackId = { components[0], components[1] };
65+
}
66+
67+
if (m_sdpMsIdAndTrackId.second.isEmpty())
68+
retrieveMediaStreamAndTrackIdFromSDP();
69+
5770
m_data.mediaStreamId = mediaStreamIdFromPad();
5871

5972
if (!m_sdpMsIdAndTrackId.second.isEmpty())
@@ -128,8 +141,10 @@ GRefPtr<GstElement> GStreamerIncomingTrackProcessor::incomingTrackProcessor()
128141
if (m_data.type == RealtimeMediaSource::Type::Audio)
129142
return createParser();
130143

131-
GST_DEBUG_OBJECT(m_bin.get(), "Requesting a key-frame");
132-
gst_pad_send_event(m_pad.get(), gst_video_event_new_upstream_force_key_unit(GST_CLOCK_TIME_NONE, TRUE, 1));
144+
if (m_data.type == RealtimeMediaSource::Type::Video) {
145+
GST_DEBUG_OBJECT(m_bin.get(), "Requesting a key-frame");
146+
gst_pad_send_event(m_pad.get(), gst_video_event_new_upstream_force_key_unit(GST_CLOCK_TIME_NONE, TRUE, 1));
147+
}
133148

134149
bool forceEarlyVideoDecoding = !g_strcmp0(g_getenv("WEBKIT_GST_WEBRTC_FORCE_EARLY_VIDEO_DECODING"), "1");
135150
GST_DEBUG_OBJECT(m_bin.get(), "Configuring for input caps: %" GST_PTR_FORMAT "%s", m_data.caps.get(), forceEarlyVideoDecoding ? " and early decoding" : "");

0 commit comments

Comments
 (0)