// Package webrtc is the datarhei Core subsystem that turns WebRTC into // a first-class output alongside RTMP, SRT, and HLS. It owns the WHEP // HTTP handler, wires FFmpeg's RTP output into per-process Pion // Sources, and tracks active peer connections. // // See docs/design/2026-04-17-datarhei-dragon-fork-m2-webrtc-core-integration.md // for the full design. package webrtc import ( "fmt" "net" ) // Alloc binds :0 on loopback UDPv4, records the port the kernel assigned, // closes the socket, and returns the port number. // // The caller is expected to re-bind that exact port via // core/webrtc.NewSourceOn immediately. There is a microsecond-sized race // window where another process on the host could grab the port; if that // happens, the caller's rebind will fail and the error should be // propagated. In practice this is rare enough that a retry loop would be // unnecessary churn. func Alloc() (int, error) { c, err := net.ListenUDP("udp4", &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 0}) if err != nil { return 0, fmt.Errorf("webrtc: portalloc: %w", err) } defer c.Close() return c.LocalAddr().(*net.UDPAddr).Port, nil }