mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 19:51:11 +00:00
rtp: examples: client-rtpaux: Provide correct caps by payload type and RTX pt map by session
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3112>
This commit is contained in:
parent
8dd512fd9f
commit
5568cb33f7
1 changed files with 29 additions and 4 deletions
|
@ -67,6 +67,7 @@ typedef struct _SessionData
|
||||||
int ref;
|
int ref;
|
||||||
GstElement *rtpbin;
|
GstElement *rtpbin;
|
||||||
guint sessionNum;
|
guint sessionNum;
|
||||||
|
guint pt, rtxPt;
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
GstElement *output;
|
GstElement *output;
|
||||||
} SessionData;
|
} SessionData;
|
||||||
|
@ -129,6 +130,8 @@ make_audio_session (guint sessionNum)
|
||||||
"media", G_TYPE_STRING, "audio",
|
"media", G_TYPE_STRING, "audio",
|
||||||
"clock-rate", G_TYPE_INT, 8000,
|
"clock-rate", G_TYPE_INT, 8000,
|
||||||
"encoding-name", G_TYPE_STRING, "PCMA", NULL);
|
"encoding-name", G_TYPE_STRING, "PCMA", NULL);
|
||||||
|
ret->pt = 8;
|
||||||
|
ret->rtxPt = 98;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -154,6 +157,8 @@ make_video_session (guint sessionNum)
|
||||||
"media", G_TYPE_STRING, "video",
|
"media", G_TYPE_STRING, "video",
|
||||||
"clock-rate", G_TYPE_INT, 90000,
|
"clock-rate", G_TYPE_INT, 90000,
|
||||||
"encoding-name", G_TYPE_STRING, "THEORA", NULL);
|
"encoding-name", G_TYPE_STRING, "THEORA", NULL);
|
||||||
|
ret->pt = 96;
|
||||||
|
ret->rtxPt = 99;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -167,10 +172,22 @@ request_pt_map (GstElement * rtpbin, guint session, guint pt,
|
||||||
g_print ("Looking for caps for pt %u in session %u, have %u\n", pt, session,
|
g_print ("Looking for caps for pt %u in session %u, have %u\n", pt, session,
|
||||||
data->sessionNum);
|
data->sessionNum);
|
||||||
if (session == data->sessionNum) {
|
if (session == data->sessionNum) {
|
||||||
caps_str = gst_caps_to_string (data->caps);
|
GstCaps *caps;
|
||||||
|
|
||||||
|
if (pt == data->pt) {
|
||||||
|
caps = gst_caps_ref (data->caps);
|
||||||
|
} else if (pt == data->rtxPt) {
|
||||||
|
caps = gst_caps_copy (data->caps);
|
||||||
|
gst_caps_set_simple (caps, "encoding-name", G_TYPE_STRING, "rtx", NULL);
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
caps_str = gst_caps_to_string (caps);
|
||||||
g_print ("Returning %s\n", caps_str);
|
g_print ("Returning %s\n", caps_str);
|
||||||
g_free (caps_str);
|
g_free (caps_str);
|
||||||
return gst_caps_ref (data->caps);
|
|
||||||
|
return caps;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -254,14 +271,22 @@ request_aux_receiver (GstElement * rtpbin, guint sessid, SessionData * session)
|
||||||
GstPad *pad;
|
GstPad *pad;
|
||||||
gchar *name;
|
gchar *name;
|
||||||
GstStructure *pt_map;
|
GstStructure *pt_map;
|
||||||
|
gchar *media_pt;
|
||||||
|
|
||||||
GST_INFO ("creating AUX receiver");
|
if (sessid != session->sessionNum)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
GST_INFO ("creating AUX receiver for session %u", sessid);
|
||||||
bin = gst_bin_new (NULL);
|
bin = gst_bin_new (NULL);
|
||||||
rtx = gst_element_factory_make ("rtprtxreceive", NULL);
|
rtx = gst_element_factory_make ("rtprtxreceive", NULL);
|
||||||
|
|
||||||
|
media_pt = g_strdup_printf ("%d", session->pt);
|
||||||
pt_map = gst_structure_new ("application/x-rtp-pt-map",
|
pt_map = gst_structure_new ("application/x-rtp-pt-map",
|
||||||
"8", G_TYPE_UINT, 98, "96", G_TYPE_UINT, 99, NULL);
|
media_pt, G_TYPE_UINT, session->rtxPt, NULL);
|
||||||
g_object_set (rtx, "payload-type-map", pt_map, NULL);
|
g_object_set (rtx, "payload-type-map", pt_map, NULL);
|
||||||
gst_structure_free (pt_map);
|
gst_structure_free (pt_map);
|
||||||
|
g_free (media_pt);
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (bin), rtx);
|
gst_bin_add (GST_BIN (bin), rtx);
|
||||||
|
|
||||||
pad = gst_element_get_static_pad (rtx, "src");
|
pad = gst_element_get_static_pad (rtx, "src");
|
||||||
|
|
Loading…
Reference in a new issue