diff --git a/cmd/webrtc-poc/main.go b/cmd/webrtc-poc/main.go new file mode 100644 index 0000000..fe734bb --- /dev/null +++ b/cmd/webrtc-poc/main.go @@ -0,0 +1,55 @@ +// Command webrtc-poc runs a minimal Dragon Fork WebRTC egress server for +// manual end-to-end testing. It listens for RTP on 127.0.0.1:10000 as +// stream "test" and serves WHEP at :8787. +// +// This is NOT part of the datarhei Core binary. It will be removed or +// demoted to an internal test helper once milestone M2 lands. +package main + +import ( + "flag" + "log" + "net/http" + + "github.com/datarhei/core/v16/core/webrtc" +) + +func main() { + var ( + streamID = flag.String("stream", "test", "stream id to serve") + rtpPort = flag.Int("rtp-port", 10000, "UDP port to receive RTP on") + listen = flag.String("listen", ":8787", "WHEP HTTP listen address") + publicIP = flag.String("public-ip", "", "server public IP for NAT1To1 (optional)") + ) + flag.Parse() + + cfg := webrtc.DefaultConfig() + cfg.WHEPListen = *listen + cfg.PublicIP = *publicIP + + src, err := webrtc.NewSource(*streamID, *rtpPort) + if err != nil { + log.Fatalf("NewSource: %v", err) + } + src.Start() + defer src.Close() + log.Printf("listening for RTP on %s", src.LocalAddr()) + + reg := webrtc.NewRegistry() + if err := reg.Register(*streamID, src); err != nil { + log.Fatalf("Register: %v", err) + } + + factory, err := webrtc.NewPeerFactory(cfg) + if err != nil { + log.Fatalf("NewPeerFactory: %v", err) + } + + handler := webrtc.NewWHEPHandler(reg, factory, cfg) + + mux := http.NewServeMux() + mux.Handle("/whep/", handler) + + log.Printf("WHEP listening on %s — POST /whep/%s to subscribe", *listen, *streamID) + log.Fatal(http.ListenAndServe(*listen, mux)) +}