Invoking "add-local-ip-address" on GstWebRTCICE

Matthew Waters ystreet00 at gmail.com
Fri Jul 17 07:56:34 UTC 2020


On 17/7/20 4:07 pm, Ben Rush wrote:
> Ok. So to be clear: I'm okay with master as-is if I'm able to specify
> the IP/port range manually. I don't necessarily need the merge
> request I mentioned above if the existing code in master is able to
> handle my need for explicitly declaring the IP and port for an ICE
> candidate (which it appears to). It's my understanding the merge
> request above (after further inspection) is only concerned with port
> RANGES, not necessarily port/IP pairs. I really only have one IP/port
> pair in my scenario anyway.  
>
> I think it makes complete sense to place the port properties on
> GstWebRTCICE. 
>
> As a corollary, what really matters to me is defining the port ranges
> involved for my firewall rules. I'm seeing that (perhaps?) port ranges
> 40000-65535 are randomly selected for those involved in ICE when a
> TURN server isn't involved. I tried digging into the gstreamer and
> libnice code to understand where the exact port ranges are coming
> from, but I couldn't narrow it down. Worst case scenario, I'm fine
> relying on the automatic ICE port range identification so long as I
> know the min/max ranges involved. Any idea on what that might be?

Yes, port ranges are that MR.  A single value can also be expressed
through a range.

libnice will choose from the min/max port range if specified, otherwise,
0 is passed as the port number which means the kernel randomly generates
an available port.

The add-local-ip-address implementation in libnice explicitly sets the
NiceAddress port to 0 so will get the random treatment unless min/max
port are specified.

Cheers
-Matt

> On Thu, Jul 16, 2020 at 11:49 PM Matthew Waters <ystreet00 at gmail.com
> <mailto:ystreet00 at gmail.com>> wrote:
>
>     On 17/7/20 2:41 pm, Ben Rush wrote:
>>     Yes, you nailed it: I'm on an older release. gst-inspect showed
>>     that the property didn't exist. I was hyper-focused on the latest
>>     source and failed to inspect my local branch. I had actually
>>     thought about that over dinner today while thinking about the
>>     post I made to this group. Thanks for confirming it for me. 
>>
>>     Can you explain "it needs updating to place the necessary
>>     properties on the ICE object rather than on webrtcbin itself"?
>>     I'm willing to do the leg work, I'm just not sure what you mean
>>     precisely.
>
>     I mean, instead of adding the port properties on webrtcbin as
>     well, they should only be on the GstWebRTCICE object.  We're
>     trying the keep the API on webrtcbin limited to only the webrtc
>     PeerConnection API if at all possible. It also needs a manual
>     rebase (probably not hard) and the review comment addressed.
>
>>     On Thu, Jul 16, 2020 at 9:47 PM Matthew Waters
>>     <ystreet00 at gmail.com <mailto:ystreet00 at gmail.com>> wrote:
>>
>>
>>
>>         On 17/7/20 7:55 am, Ben Rush wrote:
>>>         Admittedly I seem to occasionally get myself confused when
>>>         it comes to navigating objects and their properties in the
>>>         GLib Object System. Often I find myself exploring sample
>>>         code and piecing together an understanding from that.
>>>         However, I can't seem to get at what I need here and am
>>>         hoping someone can help. 
>>>
>>>         First, the main problem I'm attempting to solve is forcing
>>>         WebRTCBin to restrict the addresses and ports used when
>>>         generating ICE candidates. I'm behind a firewall, don't want
>>>         to / can't use a TURN server in my specific scenario, and so
>>>         would like to specify the exact ports / addresses to be
>>>         considered as candidates. From examining the source, it
>>>         appears as though my only way to do that is to rely on
>>>         emitting this signal with the address information (IP/port): 
>>>
>>>         https://gstreamer.freedesktop.org/documentation/webrtc/index.html?gi-language=c#GstWebRTCICE::add-local-ip-address
>>>
>>>         So, I assume I'll need to call g_signal_emit_by_name() with
>>>         the proper arguments, one of which being the object to
>>>         receive the signal. All well and good, except for the fact
>>>         that the receiving object is of type GstWebRTCICE. So, I
>>>         need to get that object. Per this
>>>         documentation: https://gstreamer.freedesktop.org/documentation/webrtc/index.html?gi-language=c#webrtcbin:ice-agent it
>>>         appears to be a property on the webrtcbin element. 
>>>
>>>         So, I have this code:  
>>>
>>>             _pipeline = gst_parse_launch("webrtcbin
>>>         bundle-policy=max-bundle name=sendrecv "
>>>                 "autoaudiosrc ! audioconvert ! audioresample ! queue
>>>         ! opusenc ! rtpopuspay ! "
>>>                 "queue ! " RTP_CAPS_OPUS "97 ! sendrecv. ", &error);
>>>         .....
>>>             _webRtcElement = gst_bin_get_by_name(GST_BIN(_pipeline),
>>>         "sendrecv");
>>>         .....
>>>                     GValue value = { 0, };
>>>                     g_value_init(&value, G_TYPE_OBJECT);
>>>                     g_object_get_property(G_OBJECT(_webRtcElement),
>>>         "ice-agent", &value);
>>>                     GObject* object =
>>>         (GObject*)g_value_get_object(&value);
>>>
>>>         But the value of the object is always null. What am I doing
>>>         wrong? How am I navigating this improperly?
>>
>>         Do you have a version of GStreamer that includes that?  The
>>         'ice-agent' property on webrtcbin and 'add-local-ip-address'
>>         on gstwebrtcice is only available in master and is not in any
>>         released version yet.
>>
>>>         Also, I noticed this merge
>>>         request: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/856.
>>>         I'm hoping this doesn't mean forcing a particular IP/port is
>>>         even possible with webrtcbin.
>>
>>         This MR would probably by your best bet but it needs updating
>>         to place the necessary properties on the ICE object rather
>>         than on webrtcbin itself.
>>
>>         Cheers
>>         -Matt
>>
>>>         Thanks in advance. 
>>>
>>>         _______________________________________________
>>>         gstreamer-devel mailing list
>>>         gstreamer-devel at lists.freedesktop.org <mailto:gstreamer-devel at lists.freedesktop.org>
>>>         https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20200717/864228c6/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 484 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20200717/864228c6/attachment-0001.sig>


More information about the gstreamer-devel mailing list