diff --git a/cmd/tcp/init.go b/cmd/tcp/init.go new file mode 100644 index 00000000..353d28e6 --- /dev/null +++ b/cmd/tcp/init.go @@ -0,0 +1,35 @@ +package tcp + +import ( + "github.com/AlexxIT/go2rtc/cmd/streams" + "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/AlexxIT/go2rtc/pkg/mpegts" + "net" + "net/http" + "net/url" + "time" +) + +func Init() { + streams.HandleFunc("tcp", handle) +} + +func handle(rawURL string) (core.Producer, error) { + u, err := url.Parse(rawURL) + if err != nil { + return nil, err + } + + conn, err := net.DialTimeout("tcp", u.Host, time.Second*3) + if err != nil { + return nil, err + } + + req := &http.Request{URL: u} + res := &http.Response{Body: conn, Request: req} + client := mpegts.NewClient(res) + if err := client.Handle(); err != nil { + return nil, err + } + return client, nil +} diff --git a/main.go b/main.go index 78dbc593..4f91f4e6 100644 --- a/main.go +++ b/main.go @@ -24,6 +24,7 @@ import ( "github.com/AlexxIT/go2rtc/cmd/srtp" "github.com/AlexxIT/go2rtc/cmd/streams" "github.com/AlexxIT/go2rtc/cmd/tapo" + "github.com/AlexxIT/go2rtc/cmd/tcp" "github.com/AlexxIT/go2rtc/cmd/webrtc" "github.com/AlexxIT/go2rtc/cmd/webtorrent" "os" @@ -49,6 +50,7 @@ func main() { isapi.Init() mpegts.Init() roborock.Init() + tcp.Init() srtp.Init() homekit.Init()