WHIP Ingress ICE fails with “Failed to ping without candidate pairs” - UDP port range not initializing

I’m trying to get WHIP ingress working with LiveKit v1.11.0 in a datacenter environment (public IP 173.208.153.61). My guests can connect to rooms normally via TURN, but my WHIP connections from OBS consistently fail with ICE connection state: failed.

The symptom in ingress logs:

text
WARN: Failed to ping without candidate pairs
ICE connection state changed: failed
The smoking gun in livekit-server logs:

text
“rtc.portUDP”: {“Start”:7882,“End”:0}
The UDP port range never initializes properly. I have port_range_start: 50000 and port_range_end: 60000 in my config, but LiveKit ignores them and shows “End”:0. I’ve tried:

Setting port_range as a string

Environment variables (LIVEKIT_RTC_PORT_RANGE_START, etc.)

Removing udp_port: 7882 (suggested by some threads)

Nothing changes the “End”:0 behavior.

My config:

yaml
rtc:
tcp_port: 7881
port_range_start: 50000
port_range_end: 60000
use_external_ip: true
node_ip: “173.208.153.61”
stun_servers:

RTMP ingress works fine

Guest participants connect via TURN

STUN discovers my external IP correctly (logs show found external IP via STUN)

UDP port 7882 is reachable from outside (nc -uv succeeds)

What doesn’t work:

WHIP connections always fail ICE

rtc.portUDP always shows “End”:0

Is this a bug in v1.11.0? Am I missing a required config field? Any help appreciated. I have been working on this for awhile, and this is the last leg of it. Once I get this worked out, it will be solid. ObsVirtual Cam works for my host cam if needed. But, I know Ingress Whip would be more efficient. Again, thanks for any help. I will provide more info, if you need it. Or, more logs.

my livekit.yaml

port: 7880
bind_addresses:

  • “173.208.153.61”
    keys:
  • logging:
    level: info

redis:
address: “127.0.0.1:6379”

rtc:
udp_port: 7882
tcp_port: 7881
use_external_ip: true
node_ip: “173.208.153.61”
stun_servers:

ingress:
rtmp_base_url: “rtmp://vdo.donoconnor.com/x”
whip_base_url: “https://vdo.donoconnor.com/w

Ingress.yaml

redis:
address: “127.0.0.1:6379”

rtmp_port: 1936
whip_port: 8080
http_relay_port: 9090

bind_address: “173.208.153.61”

rtc_config:
udp_port: 7885
tcp_port: 7886
node_ip: “173.208.153.61”
use_external_ip: false
external_ip: “173.208.153.61”

interfaces:
includes:

whip:
enabled: true

webrtc:
ice_servers:

  • urls:
  • “stun:stun.l.google.com:19302”
  • urls:
  • “turn:turn.donoconnor.com”

cpu_cost:
rtmp_cpu_cost: 1.0
whip_cpu_cost: 1.0
whip_bypass_transcoding_cpu_cost: 0.1

logging:
level: debug
json: false

Made adjustments in my Nginx config, and finally connected. Got buffering in my logs, and stayed connected. Once I saw connected and buffering, I knew it was good.
I’ve been working on the PWA app for a month, and down to the testing, fine tuning and cosmetics. But, seeing connected and buffering was a huge win. Another one of those self exciting moments, that only I will know is a win. Yet, darn good moment.

Once I disabled IPv6 on my server, I was able to make a whip connection. Still not sure how to work around the IPv6 with Whio. It works great when I use obsvirtual cam, without having to disable IPv6. The stun servers have issues with iov6.

Glad you got unblocked - I did look for other examples of IPv6 not working and, although there aren’t many, most of the time it was something along the network path not supporting IPv6.

Yes, I’m sure it was the fact that my home office was running att air. :slight_smile: hey, it pushed 75 mb download and 17 sometime 30 mb upload. Plus, they forced us to it, when they pulled coaxial. However, I have fiber laid and coming this week, and all runs good with IPv4 on fiber and main office. Once I switch to better local fiber, I’m sure it will help, and I can turn IPv6 back on.

Att air helped me make things lean, and test quality.  Plus, a lot of my guest will be on iPhones and inside offices at schools, behind firewalls. As of now, they all are working great. And again, I’m sure it was my ISP.
   Thank you for your reply, and I give big thanks to LiveKit Team. I am working an Ai Avatar Agent in now, as an assistant for Guest, before they join. Then, moving to a Coaching and Athlete Assistant, for other things I’m adding. Like: Ai Coaches Video Analysis.  I gotta keep my mouth shut, but LiveKit is helping power most of this.