diff --git a/lib/membrane_webrtc/ex_webrtc/sink.ex b/lib/membrane_webrtc/ex_webrtc/sink.ex index 2ed8d07..8152fda 100644 --- a/lib/membrane_webrtc/ex_webrtc/sink.ex +++ b/lib/membrane_webrtc/ex_webrtc/sink.ex @@ -16,7 +16,7 @@ defmodule Membrane.WebRTC.ExWebRTCSink do alias Membrane.WebRTC.{ExWebRTCUtils, Signaling, SimpleWebSocketServer} - def_options signaling: [], tracks: [], video_codec: [], ice_servers: [] + def_options signaling: [], tracks: [], video_codec: [], ice_servers: [], ice_port_range: [], ice_ip_filter: [] def_input_pad :input, accepted_format: Membrane.RTP, @@ -41,7 +41,9 @@ defmodule Membrane.WebRTC.ExWebRTCSink do audio_params: ExWebRTCUtils.codec_params(:opus), video_params: ExWebRTCUtils.codec_params(opts.video_codec), video_codec: opts.video_codec, - ice_servers: opts.ice_servers + ice_servers: opts.ice_servers, + ice_port_range: opts.ice_port_range, + ice_ip_filter: opts.ice_ip_filter }} end @@ -69,6 +71,8 @@ defmodule Membrane.WebRTC.ExWebRTCSink do {:ok, pc} = PeerConnection.start_link( ice_servers: state.ice_servers, + ice_port_range: state.ice_port_range, + ice_ip_filter: state.ice_ip_filter, video_codecs: state.video_params, audio_codecs: state.audio_params ) diff --git a/lib/membrane_webrtc/ex_webrtc/source.ex b/lib/membrane_webrtc/ex_webrtc/source.ex index c84e31c..e1f9e99 100644 --- a/lib/membrane_webrtc/ex_webrtc/source.ex +++ b/lib/membrane_webrtc/ex_webrtc/source.ex @@ -12,6 +12,8 @@ defmodule Membrane.WebRTC.ExWebRTCSource do allowed_video_codecs: [], preferred_video_codec: [], ice_servers: [], + ice_port_range: [], + ice_ip_filter: [], keyframe_interval: [], sdp_candidates_timeout: [] @@ -43,6 +45,8 @@ defmodule Membrane.WebRTC.ExWebRTCSource do allowed_video_codecs: [:h264 | :vp8], preferred_video_codec: :h264 | :vp8, ice_servers: [ExWebRTC.PeerConnection.Configuration.ice_server()], + ice_port_range: Enumerable.t(non_neg_integer()), + ice_ip_filter: (:inet.ip_address() -> boolean()), keyframe_interval: Membrane.Time.t() | nil, sdp_candidates_timeout: Membrane.Time.t() | nil } @@ -53,6 +57,8 @@ defmodule Membrane.WebRTC.ExWebRTCSource do :allowed_video_codecs, :preferred_video_codec, :ice_servers, + :ice_port_range, + :ice_ip_filter, :keyframe_interval, :sdp_candidates_timeout ] @@ -78,6 +84,8 @@ defmodule Membrane.WebRTC.ExWebRTCSource do allowed_video_codecs: opts.allowed_video_codecs |> Enum.uniq(), preferred_video_codec: opts.preferred_video_codec, ice_servers: opts.ice_servers, + ice_port_range: opts.ice_port_range, + ice_ip_filter: opts.ice_ip_filter, keyframe_interval: opts.keyframe_interval, sdp_candidates_timeout: opts.sdp_candidates_timeout }} @@ -321,6 +329,8 @@ defmodule Membrane.WebRTC.ExWebRTCSource do {:ok, pc} = PeerConnection.start( ice_servers: state.ice_servers, + ice_port_range: state.ice_port_range, + ice_ip_filter: state.ice_ip_filter, video_codecs: video_params, audio_codecs: state.audio_params ) diff --git a/lib/membrane_webrtc/sink.ex b/lib/membrane_webrtc/sink.ex index 4d9c84f..c4064fc 100644 --- a/lib/membrane_webrtc/sink.ex +++ b/lib/membrane_webrtc/sink.ex @@ -85,6 +85,14 @@ defmodule Membrane.WebRTC.Sink do spec: [ExWebRTC.PeerConnection.Configuration.ice_server()], default: [%{urls: "stun:stun.l.google.com:19302"}] ], + ice_port_range: [ + spec: Enumerable.t(non_neg_integer()), + default: [0] + ], + ice_ip_filter: [ + spec: (:inet.ip_address() -> boolean()), + default: &__MODULE__.default_ice_ip_filter/1 + ], payload_rtp: [ spec: boolean(), default: true @@ -120,7 +128,9 @@ defmodule Membrane.WebRTC.Sink do signaling: opts.signaling, tracks: opts.tracks, video_codec: opts.video_codec, - ice_servers: opts.ice_servers + ice_servers: opts.ice_servers, + ice_port_range: opts.ice_port_range, + ice_ip_filter: opts.ice_ip_filter }) {[spec: spec], %{payload_rtp: opts.payload_rtp, video_codec: opts.video_codec}} @@ -219,4 +229,6 @@ defmodule Membrane.WebRTC.Sink do def handle_element_end_of_stream(_name, _pad, _ctx, state) do {[], state} end + + def default_ice_ip_filter(_ip), do: true end diff --git a/lib/membrane_webrtc/source.ex b/lib/membrane_webrtc/source.ex index 80f4f2d..6e0e5fd 100644 --- a/lib/membrane_webrtc/source.ex +++ b/lib/membrane_webrtc/source.ex @@ -108,6 +108,14 @@ defmodule Membrane.WebRTC.Source do spec: [ExWebRTC.PeerConnection.Configuration.ice_server()], default: [%{urls: "stun:stun.l.google.com:19302"}] ], + ice_port_range: [ + spec: Enumerable.t(non_neg_integer()), + default: [0] + ], + ice_ip_filter: [ + spec: (:inet.ip_address() -> boolean()), + default: &__MODULE__.default_ice_ip_filter/1 + ], depayload_rtp: [ spec: boolean(), default: true @@ -263,4 +271,6 @@ defmodule Membrane.WebRTC.Source do clock_rate: ExWebRTCUtils.codec_clock_rate(:h264) }) end + + def default_ice_ip_filter(_ip), do: true end