summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2020-07-11 15:40:40 -0400
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>2020-07-14 20:48:04 +0000
commit19c632f4e89521a6bd2b4cb41f1680c6232279c5 (patch)
treec15ef1cb17b001748ac018ca85d81bc6976f3f4d /gst
parentf6ac2e44bb4e3d6685268481c16abfb60191b93c (diff)
downloadgstreamer-plugins-bad-19c632f4e89521a6bd2b4cb41f1680c6232279c5.tar.gz
ristsrc: Add support for domain name
This add domain name resolution (similar to udpsrc does) to the ristsrc element. Fixes 1352 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1433>
Diffstat (limited to 'gst')
-rw-r--r--gst/rist/gstristsrc.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/gst/rist/gstristsrc.c b/gst/rist/gstristsrc.c
index a9cbff9bd..0545faf0d 100644
--- a/gst/rist/gstristsrc.c
+++ b/gst/rist/gstristsrc.c
@@ -586,12 +586,30 @@ gst_rist_src_setup_rtcp_socket (GstRistSrc * src, RistReceiverBond * bond)
GSocket *socket = NULL;
GInetAddress *iaddr = NULL;
guint port = bond->port + 1;
+ GError *error = NULL;
g_object_get (bond->rtcp_src, "used-socket", &socket, NULL);
if (!socket)
return GST_STATE_CHANGE_FAILURE;
iaddr = g_inet_address_new_from_string (bond->address);
+ if (!iaddr) {
+ GList *results;
+ GResolver *resolver = NULL;
+
+ resolver = g_resolver_get_default ();
+ results = g_resolver_lookup_by_name (resolver, bond->address, NULL, &error);
+
+ if (!results) {
+ g_object_unref (resolver);
+ goto dns_resolve_failed;
+ }
+
+ iaddr = G_INET_ADDRESS (g_object_ref (results->data));
+
+ g_resolver_free_addresses (results);
+ g_object_unref (resolver);
+ }
if (g_inet_address_get_is_multicast (iaddr)) {
/* mc-ttl is not supported by dynudpsink */
@@ -636,6 +654,14 @@ gst_rist_src_setup_rtcp_socket (GstRistSrc * src, RistReceiverBond * bond)
gst_element_sync_state_with_parent (bond->rtcp_sink);
return GST_STATE_CHANGE_SUCCESS;
+
+dns_resolve_failed:
+ GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND,
+ ("Could not resolve hostname '%s'", GST_STR_NULL (bond->address)),
+ ("DNS resolver reported: %s", error->message));
+ g_error_free (error);
+ return GST_STATE_CHANGE_FAILURE;
+
}
static GstStateChangeReturn