From ad1bea088e780c5393f893cfe93419266758c05b Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Mon, 10 Mar 2025 19:18:04 -0300 Subject: [PATCH 01/14] Fix check_command in build.sh --- scripts/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build.sh b/scripts/build.sh index e365eb54..ac9e01b2 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,7 +1,7 @@ #!/bin/sh check_command() { - if ! command -v $1 &> /dev/null + if ! command -v "$1" > /dev/null then echo "Error: $1 could not be found. Please install it." exit 1 From 3376bf8b99ef08650bd827bd8e4c59219bc365f2 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Mon, 10 Mar 2025 19:34:05 -0300 Subject: [PATCH 02/14] Avoid ignoring errors --- scripts/build.sh | 49 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index ac9e01b2..1a43ed82 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,10 +1,12 @@ #!/bin/sh +set -eu + check_command() { - if ! command -v "$1" > /dev/null + if ! command -v "$1" >/dev/null then - echo "Error: $1 could not be found. Please install it." - exit 1 + echo "Error: $1 could not be found. Please install it." >&2 + return 1 fi } @@ -13,82 +15,97 @@ check_command go check_command 7z check_command upx +set -x + # Windows amd64 export GOOS=windows export GOARCH=amd64 FILENAME="go2rtc_win64.zip" -go build -ldflags "-s -w" -trimpath && 7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe +go build -ldflags "-s -w" -trimpath +7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe # Windows 386 export GOOS=windows export GOARCH=386 FILENAME="go2rtc_win32.zip" -go build -ldflags "-s -w" -trimpath && 7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe +go build -ldflags "-s -w" -trimpath +7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe # Windows arm64 export GOOS=windows export GOARCH=arm64 FILENAME="go2rtc_win_arm64.zip" -go build -ldflags "-s -w" -trimpath && 7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe +go build -ldflags "-s -w" -trimpath +7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe # Linux amd64 export GOOS=linux export GOARCH=amd64 FILENAME="go2rtc_linux_amd64" -go build -ldflags "-s -w" -trimpath -o $FILENAME && upx --lzma --force-overwrite -q --no-progress $FILENAME +go build -ldflags "-s -w" -trimpath -o $FILENAME +upx --lzma --force-overwrite -q --no-progress $FILENAME # Linux 386 export GOOS=linux export GOARCH=386 FILENAME="go2rtc_linux_i386" -go build -ldflags "-s -w" -trimpath -o $FILENAME && upx --lzma --force-overwrite -q --no-progress $FILENAME +go build -ldflags "-s -w" -trimpath -o $FILENAME +upx --lzma --force-overwrite -q --no-progress $FILENAME # Linux arm64 export GOOS=linux export GOARCH=arm64 FILENAME="go2rtc_linux_arm64" -go build -ldflags "-s -w" -trimpath -o $FILENAME && upx --lzma --force-overwrite -q --no-progress $FILENAME +go build -ldflags "-s -w" -trimpath -o $FILENAME +upx --lzma --force-overwrite -q --no-progress $FILENAME # Linux arm v7 export GOOS=linux export GOARCH=arm export GOARM=7 FILENAME="go2rtc_linux_arm" -go build -ldflags "-s -w" -trimpath -o $FILENAME && upx --lzma --force-overwrite -q --no-progress $FILENAME +go build -ldflags "-s -w" -trimpath -o $FILENAME +upx --lzma --force-overwrite -q --no-progress $FILENAME # Linux arm v6 export GOOS=linux export GOARCH=arm export GOARM=6 FILENAME="go2rtc_linux_armv6" -go build -ldflags "-s -w" -trimpath -o $FILENAME && upx --lzma --force-overwrite -q --no-progress $FILENAME +go build -ldflags "-s -w" -trimpath -o $FILENAME +upx --lzma --force-overwrite -q --no-progress $FILENAME # Linux mipsle export GOOS=linux export GOARCH=mipsle FILENAME="go2rtc_linux_mipsel" -go build -ldflags "-s -w" -trimpath -o $FILENAME && upx --lzma --force-overwrite -q --no-progress $FILENAME +go build -ldflags "-s -w" -trimpath -o $FILENAME +upx --lzma --force-overwrite -q --no-progress $FILENAME # Darwin amd64 export GOOS=darwin export GOARCH=amd64 FILENAME="go2rtc_mac_amd64.zip" -go build -ldflags "-s -w" -trimpath && 7z a -mx9 -bso0 -sdel $FILENAME go2rtc +go build -ldflags "-s -w" -trimpath +7z a -mx9 -bso0 -sdel $FILENAME go2rtc # Darwin arm64 export GOOS=darwin export GOARCH=arm64 FILENAME="go2rtc_mac_arm64.zip" -go build -ldflags "-s -w" -trimpath && 7z a -mx9 -bso0 -sdel $FILENAME go2rtc +go build -ldflags "-s -w" -trimpath +7z a -mx9 -bso0 -sdel $FILENAME go2rtc # FreeBSD amd64 export GOOS=freebsd export GOARCH=amd64 FILENAME="go2rtc_freebsd_amd64.zip" -go build -ldflags "-s -w" -trimpath && 7z a -mx9 -bso0 -sdel $FILENAME go2rtc +go build -ldflags "-s -w" -trimpath +7z a -mx9 -bso0 -sdel $FILENAME go2rtc # FreeBSD arm64 export GOOS=freebsd export GOARCH=arm64 FILENAME="go2rtc_freebsd_arm64.zip" -go build -ldflags "-s -w" -trimpath && 7z a -mx9 -bso0 -sdel $FILENAME go2rtc +go build -ldflags "-s -w" -trimpath +7z a -mx9 -bso0 -sdel $FILENAME go2rtc From 5f17474ff4fa8cb311cb118f404fc713bd1d252b Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Mon, 10 Mar 2025 19:36:16 -0300 Subject: [PATCH 03/14] Fix build in linux amd64 --- scripts/build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/build.sh b/scripts/build.sh index 1a43ed82..82c5d506 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -17,6 +17,8 @@ check_command upx set -x +export CGO_ENABLED=0 + # Windows amd64 export GOOS=windows export GOARCH=amd64 From 9a7c7d2a4b0baa69fb3dfcd5e9bb0fb12a4b370f Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Mon, 10 Mar 2025 19:45:13 -0300 Subject: [PATCH 04/14] Fix GOTOOLCHAIN in build.sh --- scripts/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 82c5d506..05d364ff 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -30,7 +30,7 @@ go build -ldflags "-s -w" -trimpath export GOOS=windows export GOARCH=386 FILENAME="go2rtc_win32.zip" -go build -ldflags "-s -w" -trimpath +GOTOOLCHAIN=go1.20.14 go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe # Windows arm64 @@ -88,7 +88,7 @@ upx --lzma --force-overwrite -q --no-progress $FILENAME export GOOS=darwin export GOARCH=amd64 FILENAME="go2rtc_mac_amd64.zip" -go build -ldflags "-s -w" -trimpath +GOTOOLCHAIN=go1.20.14 go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc # Darwin arm64 From c51c13b4b8a8b5a9a80be290b9bfb5be637b63f7 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Mon, 10 Mar 2025 19:49:04 -0300 Subject: [PATCH 05/14] Avoid export pollution --- scripts/build.sh | 67 +++++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 41 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 05d364ff..1e978abe 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -20,94 +20,79 @@ set -x export CGO_ENABLED=0 # Windows amd64 -export GOOS=windows -export GOARCH=amd64 FILENAME="go2rtc_win64.zip" -go build -ldflags "-s -w" -trimpath +GOOS=windows GOARCH=amd64 \ + go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe # Windows 386 -export GOOS=windows -export GOARCH=386 FILENAME="go2rtc_win32.zip" -GOTOOLCHAIN=go1.20.14 go build -ldflags "-s -w" -trimpath +GOOS=windows GOARCH=386 GOTOOLCHAIN=go1.20.14 \ + go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe # Windows arm64 -export GOOS=windows -export GOARCH=arm64 FILENAME="go2rtc_win_arm64.zip" -go build -ldflags "-s -w" -trimpath +GOOS=windows GOARCH=arm64 \ + go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe # Linux amd64 -export GOOS=linux -export GOARCH=amd64 FILENAME="go2rtc_linux_amd64" -go build -ldflags "-s -w" -trimpath -o $FILENAME +GOOS=linux GOARCH=amd64 \ + go build -ldflags "-s -w" -trimpath -o $FILENAME upx --lzma --force-overwrite -q --no-progress $FILENAME # Linux 386 -export GOOS=linux -export GOARCH=386 FILENAME="go2rtc_linux_i386" -go build -ldflags "-s -w" -trimpath -o $FILENAME +GOOS=linux GOARCH=386 \ + go build -ldflags "-s -w" -trimpath -o $FILENAME upx --lzma --force-overwrite -q --no-progress $FILENAME # Linux arm64 -export GOOS=linux -export GOARCH=arm64 FILENAME="go2rtc_linux_arm64" -go build -ldflags "-s -w" -trimpath -o $FILENAME +GOOS=linux GOARCH=arm64 \ + go build -ldflags "-s -w" -trimpath -o $FILENAME upx --lzma --force-overwrite -q --no-progress $FILENAME # Linux arm v7 -export GOOS=linux -export GOARCH=arm -export GOARM=7 FILENAME="go2rtc_linux_arm" -go build -ldflags "-s -w" -trimpath -o $FILENAME +GOOS=linux GOARCH=arm GOARM=7 \ + go build -ldflags "-s -w" -trimpath -o $FILENAME upx --lzma --force-overwrite -q --no-progress $FILENAME # Linux arm v6 -export GOOS=linux -export GOARCH=arm -export GOARM=6 FILENAME="go2rtc_linux_armv6" -go build -ldflags "-s -w" -trimpath -o $FILENAME +GOOS=linux GOARCH=arm GOARM=6 \ + go build -ldflags "-s -w" -trimpath -o $FILENAME upx --lzma --force-overwrite -q --no-progress $FILENAME # Linux mipsle -export GOOS=linux -export GOARCH=mipsle FILENAME="go2rtc_linux_mipsel" -go build -ldflags "-s -w" -trimpath -o $FILENAME +GOOS=linux GOARCH=mipsle \ + go build -ldflags "-s -w" -trimpath -o $FILENAME upx --lzma --force-overwrite -q --no-progress $FILENAME # Darwin amd64 -export GOOS=darwin -export GOARCH=amd64 FILENAME="go2rtc_mac_amd64.zip" -GOTOOLCHAIN=go1.20.14 go build -ldflags "-s -w" -trimpath +GOOS=darwin GOARCH=amd64 GOTOOLCHAIN=go1.20.14 \ + go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc # Darwin arm64 -export GOOS=darwin -export GOARCH=arm64 FILENAME="go2rtc_mac_arm64.zip" -go build -ldflags "-s -w" -trimpath +GOOS=darwin GOARCH=arm64 \ + go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc # FreeBSD amd64 -export GOOS=freebsd -export GOARCH=amd64 FILENAME="go2rtc_freebsd_amd64.zip" -go build -ldflags "-s -w" -trimpath +GOOS=freebsd GOARCH=amd64 \ + go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc # FreeBSD arm64 -export GOOS=freebsd -export GOARCH=arm64 FILENAME="go2rtc_freebsd_arm64.zip" -go build -ldflags "-s -w" -trimpath +GOOS=freebsd GOARCH=arm64 \ + go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc From d894483166ee77f082437795c7fd4f5ce4a53884 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Mon, 13 Oct 2025 08:42:06 -0300 Subject: [PATCH 06/14] Add go2rtc to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 52fe9c86..8713e925 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ go2rtc_linux* go2rtc_mac* go2rtc_win* +/go2rtc + 0_test.go .DS_Store From 007e8dbc75757fa88cbcd4bc8fc6129b67b25f5c Mon Sep 17 00:00:00 2001 From: Alex X Date: Tue, 14 Oct 2025 17:20:54 +0300 Subject: [PATCH 07/14] Add caution note to readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 62ff9b00..1416b810 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,9 @@ Ultimate camera streaming application with support for RTSP, WebRTC, HomeKit, FF - HomeKit Accessory Protocol from [@brutella](https://github.com/brutella/hap) - creator of the project's logo [@v_novoseltsev](https://www.instagram.com/v_novoseltsev) +> [!CAUTION] +> There is NO existing website for go2rtc project other than this GitHub repository. The website go2rtc[.]com is in no way associated with the authors of this project. + --- * [Fast start](#fast-start) From d59cb99f0d54422a8af3d9dc5e2931f7cedb1a70 Mon Sep 17 00:00:00 2001 From: Alex X Date: Wed, 15 Oct 2025 14:09:07 +0300 Subject: [PATCH 08/14] Support RTSP redirects #1909 by @eddielth --- pkg/rtsp/client.go | 36 ++++++++++++++++++++++++++++++------ pkg/tcp/auth.go | 4 ++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/pkg/rtsp/client.go b/pkg/rtsp/client.go index 4e891213..c9607321 100644 --- a/pkg/rtsp/client.go +++ b/pkg/rtsp/client.go @@ -93,7 +93,35 @@ func (c *Conn) Do(req *tcp.Request) (*tcp.Response, error) { c.Fire(res) - if res.StatusCode == http.StatusUnauthorized { + switch res.StatusCode { + case http.StatusOK: + return res, nil + + case http.StatusMovedPermanently, http.StatusFound: + rawURL := res.Header.Get("Location") + + var u *url.URL + if u, err = url.Parse(rawURL); err != nil { + return nil, err + } + + if u.User == nil { + u.User = c.auth.UserInfo() // restore auth if we don't have it in the new URL + } + + c.uri = u.String() // so auth will be saved on reconnect + + _ = c.conn.Close() + + if err = c.Dial(); err != nil { + return nil, err + } + + req.URL = c.URL // because path was changed + + return c.Do(req) + + case http.StatusUnauthorized: switch c.auth.Method { case tcp.AuthNone: if c.auth.ReadNone(res) { @@ -109,11 +137,7 @@ func (c *Conn) Do(req *tcp.Request) (*tcp.Response, error) { } } - if res.StatusCode != http.StatusOK { - return res, fmt.Errorf("wrong response on %s", req.Method) - } - - return res, nil + return res, fmt.Errorf("wrong response on %s", req.Method) } func (c *Conn) Options() error { diff --git a/pkg/tcp/auth.go b/pkg/tcp/auth.go index 3eb26024..9cc56ba2 100644 --- a/pkg/tcp/auth.go +++ b/pkg/tcp/auth.go @@ -112,6 +112,10 @@ func (a *Auth) ReadNone(res *Response) bool { return false } +func (a *Auth) UserInfo() *url.Userinfo { + return url.UserPassword(a.user, a.pass) +} + func Between(s, sub1, sub2 string) string { i := strings.Index(s, sub1) if i < 0 { From c415c8f2afa5f04fd29e5ea0b3e471ccd6d36f66 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Wed, 15 Oct 2025 09:44:11 -0300 Subject: [PATCH 09/14] Remove GOTOOLCHAIN like done in CI --- scripts/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 1e978abe..4a1266ca 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -27,7 +27,7 @@ GOOS=windows GOARCH=amd64 \ # Windows 386 FILENAME="go2rtc_win32.zip" -GOOS=windows GOARCH=386 GOTOOLCHAIN=go1.20.14 \ +GOOS=windows GOARCH=386 \ go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe @@ -75,7 +75,7 @@ upx --lzma --force-overwrite -q --no-progress $FILENAME # Darwin amd64 FILENAME="go2rtc_mac_amd64.zip" -GOOS=darwin GOARCH=amd64 GOTOOLCHAIN=go1.20.14 \ +GOOS=darwin GOARCH=amd64 \ go build -ldflags "-s -w" -trimpath 7z a -mx9 -bso0 -sdel $FILENAME go2rtc From 19226df7d67d3b5634b0c746decaccbdb464c627 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Wed, 15 Oct 2025 09:44:20 -0300 Subject: [PATCH 10/14] Add go2rtc.exe to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8713e925..272fb7f0 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ go2rtc_mac* go2rtc_win* /go2rtc +/go2rtc.exe 0_test.go From cf4acd5a8d8503de3900c4b4003d1321d0dbcd9c Mon Sep 17 00:00:00 2001 From: Alex X Date: Wed, 15 Oct 2025 18:07:18 +0300 Subject: [PATCH 11/14] Code refactoring for #1641 --- scripts/build.sh | 103 ++++++++++++----------------------------------- 1 file changed, 26 insertions(+), 77 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 4a1266ca..ed188c2c 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,6 +1,7 @@ #!/bin/sh -set -eu +set -e # Exit immediately if a command exits with a non-zero status. +set -u # Treat unset variables as an error when substituting. check_command() { if ! command -v "$1" >/dev/null @@ -10,89 +11,37 @@ check_command() { fi } -# Check for required commands +build_zip() { + go build -ldflags "-s -w" -trimpath -o $2 + 7z a -mx9 -sdel $1 $2 +} + +build_upx() { + go build -ldflags "-s -w" -trimpath -o $1 + upx --best --lzma $1 +} + check_command go check_command 7z check_command upx -set -x - export CGO_ENABLED=0 -# Windows amd64 -FILENAME="go2rtc_win64.zip" -GOOS=windows GOARCH=amd64 \ - go build -ldflags "-s -w" -trimpath -7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe +set -x # Print commands and their arguments as they are executed. -# Windows 386 -FILENAME="go2rtc_win32.zip" -GOOS=windows GOARCH=386 \ - go build -ldflags "-s -w" -trimpath -7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe +GOOS=windows GOARCH=amd64 build_zip go2rtc_win64.zip go2rtc.exe +GOOS=windows GOARCH=386 build_zip go2rtc_win32.zip go2rtc.exe +GOOS=windows GOARCH=arm64 build_zip go2rtc_win_arm64.zip go2rtc.exe -# Windows arm64 -FILENAME="go2rtc_win_arm64.zip" -GOOS=windows GOARCH=arm64 \ - go build -ldflags "-s -w" -trimpath -7z a -mx9 -bso0 -sdel $FILENAME go2rtc.exe +GOOS=linux GOARCH=amd64 build_upx go2rtc_linux_amd64 +GOOS=linux GOARCH=386 build_upx go2rtc_linux_i386 +GOOS=linux GOARCH=arm64 build_upx go2rtc_linux_arm64 +GOOS=linux GOARCH=mipsle build_upx go2rtc_linux_mipsel +GOOS=linux GOARCH=arm GOARM=7 build_upx go2rtc_linux_arm +GOOS=linux GOARCH=arm GOARM=6 build_upx go2rtc_linux_armv6 -# Linux amd64 -FILENAME="go2rtc_linux_amd64" -GOOS=linux GOARCH=amd64 \ - go build -ldflags "-s -w" -trimpath -o $FILENAME -upx --lzma --force-overwrite -q --no-progress $FILENAME +GOOS=darwin GOARCH=amd64 build_zip go2rtc_mac_amd64.zip go2rtc +GOOS=darwin GOARCH=arm64 build_zip go2rtc_mac_arm64.zip go2rtc -# Linux 386 -FILENAME="go2rtc_linux_i386" -GOOS=linux GOARCH=386 \ - go build -ldflags "-s -w" -trimpath -o $FILENAME -upx --lzma --force-overwrite -q --no-progress $FILENAME - -# Linux arm64 -FILENAME="go2rtc_linux_arm64" -GOOS=linux GOARCH=arm64 \ - go build -ldflags "-s -w" -trimpath -o $FILENAME -upx --lzma --force-overwrite -q --no-progress $FILENAME - -# Linux arm v7 -FILENAME="go2rtc_linux_arm" -GOOS=linux GOARCH=arm GOARM=7 \ - go build -ldflags "-s -w" -trimpath -o $FILENAME -upx --lzma --force-overwrite -q --no-progress $FILENAME - -# Linux arm v6 -FILENAME="go2rtc_linux_armv6" -GOOS=linux GOARCH=arm GOARM=6 \ - go build -ldflags "-s -w" -trimpath -o $FILENAME -upx --lzma --force-overwrite -q --no-progress $FILENAME - -# Linux mipsle -FILENAME="go2rtc_linux_mipsel" -GOOS=linux GOARCH=mipsle \ - go build -ldflags "-s -w" -trimpath -o $FILENAME -upx --lzma --force-overwrite -q --no-progress $FILENAME - -# Darwin amd64 -FILENAME="go2rtc_mac_amd64.zip" -GOOS=darwin GOARCH=amd64 \ - go build -ldflags "-s -w" -trimpath -7z a -mx9 -bso0 -sdel $FILENAME go2rtc - -# Darwin arm64 -FILENAME="go2rtc_mac_arm64.zip" -GOOS=darwin GOARCH=arm64 \ - go build -ldflags "-s -w" -trimpath -7z a -mx9 -bso0 -sdel $FILENAME go2rtc - -# FreeBSD amd64 -FILENAME="go2rtc_freebsd_amd64.zip" -GOOS=freebsd GOARCH=amd64 \ - go build -ldflags "-s -w" -trimpath -7z a -mx9 -bso0 -sdel $FILENAME go2rtc - -# FreeBSD arm64 -FILENAME="go2rtc_freebsd_arm64.zip" -GOOS=freebsd GOARCH=arm64 \ - go build -ldflags "-s -w" -trimpath -7z a -mx9 -bso0 -sdel $FILENAME go2rtc +GOOS=freebsd GOARCH=amd64 build_zip go2rtc_freebsd_amd64.zip go2rtc +GOOS=freebsd GOARCH=arm64 build_zip go2rtc_freebsd_arm64.zip go2rtc From 5bbc2aaf2e418b48ffd5fe33cf1ab40f690ef75b Mon Sep 17 00:00:00 2001 From: Alex X Date: Tue, 21 Oct 2025 15:21:33 +0300 Subject: [PATCH 12/14] Move ngrok module docs to another page. --- README.md | 71 ++-------------------------------------- internal/ngrok/README.md | 52 +++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 68 deletions(-) create mode 100644 internal/ngrok/README.md diff --git a/README.md b/README.md index 1416b810..b6d2ad93 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,6 @@ Ultimate camera streaming application with support for RTSP, WebRTC, HomeKit, FF - mixing tracks from different sources to single stream - auto-match client-supported codecs - [2-way audio](#two-way-audio) for some cameras -- streaming from private networks via [ngrok](#module-ngrok) - can be [integrated to](#module-api) any smart home platform or be used as [standalone app](#go2rtc-binary) **Inspired by:** @@ -138,7 +137,7 @@ Don't forget to fix the rights `chmod +x go2rtc_xxx_xxx` on Linux and Mac. ### go2rtc: Docker -The Docker container [`alexxit/go2rtc`](https://hub.docker.com/r/alexxit/go2rtc) supports multiple architectures including `amd64`, `386`, `arm64`, and `arm`. This container offers the same functionality as the [Home Assistant Add-on](#go2rtc-home-assistant-add-on) but is designed to operate independently of Home Assistant. It comes preinstalled with [FFmpeg](#source-ffmpeg), [ngrok](#module-ngrok), and [Python](#source-echo). +The Docker container [`alexxit/go2rtc`](https://hub.docker.com/r/alexxit/go2rtc) supports multiple architectures including `amd64`, `386`, `arm64`, and `arm`. This container offers the same functionality as the [Home Assistant Add-on](#go2rtc-home-assistant-add-on) but is designed to operate independently of Home Assistant. It comes preinstalled with [FFmpeg](#source-ffmpeg) and [Python](#source-echo). ### go2rtc: Home Assistant Add-on @@ -977,15 +976,6 @@ webrtc: - stun:8555 # if you have a dynamic public IP address ``` -**Private IP** - -- setup integration with [ngrok service](#module-ngrok) - -```yaml -ngrok: - command: ... -``` - **Hard tech way 1. Own TCP-tunnel** If you have a personal [VPS](https://en.wikipedia.org/wiki/Virtual_private_server), you can create a TCP tunnel and setup in the same way as "Static public IP". But use your VPS IP address in the YAML config. @@ -1083,63 +1073,9 @@ webtorrent: Link example: https://alexxit.github.io/go2rtc/#share=02SNtgjKXY&pwd=wznEQqznxW&media=video+audio -TODO: article on how it works... - ### Module: ngrok -With ngrok integration, you can get external access to your streams in situations when you have Internet with a private IP address. - -- ngrok is pre-installed for **Docker** and **Hass add-on** users -- you may need external access for two different things: - - WebRTC stream, so you need a tunnel WebRTC TCP port (ex. 8555) - - go2rtc web interface, so you need a tunnel API HTTP port (ex. 1984) -- ngrok supports authorization for your web interface -- ngrok automatically adds HTTPS to your web interface - -The ngrok free subscription has the following limitations: - -- You can reserve a free domain for serving the web interface, but the TCP address you get will always be random and change with each restart of the ngrok agent (not a problem for WebRTC stream) -- You can forward multiple ports from a single agent, but you can only run one ngrok agent on the free plan - -go2rtc will automatically get your external TCP address (if you enable it in ngrok config) and use it with WebRTC connection (if you enable it in webrtc config). - -You need to manually download the [ngrok agent app](https://ngrok.com/download) for your OS and register with the [ngrok service](https://ngrok.com/signup). - -**Tunnel for only WebRTC Stream** - -You need to add your [ngrok authtoken](https://dashboard.ngrok.com/get-started/your-authtoken) and WebRTC TCP port to YAML: - -```yaml -ngrok: - command: ngrok tcp 8555 --authtoken eW91IHNoYWxsIG5vdCBwYXNzCnlvdSBzaGFsbCBub3QgcGFzcw -``` - -**Tunnel for WebRTC and Web interface** - -You need to create `ngrok.yaml` config file and add it to the go2rtc config: - -```yaml -ngrok: - command: ngrok start --all --config ngrok.yaml -``` - -ngrok config example: - -```yaml -version: "2" -authtoken: eW91IHNoYWxsIG5vdCBwYXNzCnlvdSBzaGFsbCBub3QgcGFzcw -tunnels: - api: - addr: 1984 # use the same port as in the go2rtc config - proto: http - basic_auth: - - admin:password # you can set login/pass for your web interface - webrtc: - addr: 8555 # use the same port as in the go2rtc config - proto: tcp -``` - -See the [ngrok agent documentation](https://ngrok.com/docs/agent/config/) for more details on the ngrok configuration file. +With [ngrok](https://ngrok.com/) integration, you can get external access to your streams in situations when you have Internet with a private IP address ([read more](https://github.com/AlexxIT/go2rtc/blob/master/internal/ngrok/README.md)). ### Module: Hass @@ -1258,7 +1194,6 @@ log: level: info # default level api: trace exec: debug - ngrok: info rtsp: warn streams: error webrtc: fatal @@ -1286,7 +1221,7 @@ webrtc: - external access to WebRTC TCP port is not a problem, because it is used only for transmitting encrypted media data - anyway you need to open this port to your local network and to the Internet for WebRTC to work -If you need web interface protection without the Home Assistant add-on, you need to use a reverse proxy, like [Nginx](https://nginx.org/), [Caddy](https://caddyserver.com/), [ngrok](https://ngrok.com/), etc. +If you need web interface protection without the Home Assistant add-on, you need to use a reverse proxy, like [Nginx](https://nginx.org/), [Caddy](https://caddyserver.com/), etc. PS. Additionally, WebRTC will try to use the 8555 UDP port to transmit encrypted media. It works without problems on the local network, and sometimes also works for external access, even if you haven't opened this port on your router ([read more](https://en.wikipedia.org/wiki/UDP_hole_punching)). But for stable external WebRTC access, you need to open the 8555 port on your router for both TCP and UDP. diff --git a/internal/ngrok/README.md b/internal/ngrok/README.md new file mode 100644 index 00000000..695613fe --- /dev/null +++ b/internal/ngrok/README.md @@ -0,0 +1,52 @@ +With ngrok integration, you can get external access to your streams in situations when you have Internet with a private IP address. + +- you may need external access for two different things: + - WebRTC stream, so you need a tunnel WebRTC TCP port (ex. 8555) + - go2rtc web interface, so you need a tunnel API HTTP port (ex. 1984) +- ngrok supports authorization for your web interface +- ngrok automatically adds HTTPS to your web interface + +The ngrok free subscription has the following limitations: + +- You can reserve a free domain for serving the web interface, but the TCP address you get will always be random and change with each restart of the ngrok agent (not a problem for WebRTC stream) +- You can forward multiple ports from a single agent, but you can only run one ngrok agent on the free plan + +go2rtc will automatically get your external TCP address (if you enable it in ngrok config) and use it with WebRTC connection (if you enable it in webrtc config). + +You need to manually download the [ngrok agent app](https://ngrok.com/download) for your OS and register with the [ngrok service](https://ngrok.com/signup). + +**Tunnel for only WebRTC Stream** + +You need to add your [ngrok authtoken](https://dashboard.ngrok.com/get-started/your-authtoken) and WebRTC TCP port to YAML: + +```yaml +ngrok: + command: ngrok tcp 8555 --authtoken eW91IHNoYWxsIG5vdCBwYXNzCnlvdSBzaGFsbCBub3QgcGFzcw +``` + +**Tunnel for WebRTC and Web interface** + +You need to create `ngrok.yaml` config file and add it to the go2rtc config: + +```yaml +ngrok: + command: ngrok start --all --config ngrok.yaml +``` + +ngrok config example: + +```yaml +version: "2" +authtoken: eW91IHNoYWxsIG5vdCBwYXNzCnlvdSBzaGFsbCBub3QgcGFzcw +tunnels: + api: + addr: 1984 # use the same port as in the go2rtc config + proto: http + basic_auth: + - admin:password # you can set login/pass for your web interface + webrtc: + addr: 8555 # use the same port as in the go2rtc config + proto: tcp +``` + +See the [ngrok agent documentation](https://ngrok.com/docs/agent/config/) for more details on the ngrok configuration file. From a8d2312cb0fad7b7245e9c59d2e2cc883a76fc97 Mon Sep 17 00:00:00 2001 From: Alex X Date: Tue, 21 Oct 2025 15:22:46 +0300 Subject: [PATCH 13/14] Update dependencies --- go.mod | 40 ++++++++++++++++++++-------------------- go.sum | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 20 deletions(-) diff --git a/go.mod b/go.mod index 7abf1edd..b67161ed 100644 --- a/go.mod +++ b/go.mod @@ -1,28 +1,28 @@ module github.com/AlexxIT/go2rtc -go 1.23.0 +go 1.24.0 require ( github.com/asticode/go-astits v1.13.0 - github.com/expr-lang/expr v1.17.5 + github.com/expr-lang/expr v1.17.6 github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.3 github.com/mattn/go-isatty v0.0.20 - github.com/miekg/dns v1.1.66 + github.com/miekg/dns v1.1.68 github.com/pion/ice/v4 v4.0.10 - github.com/pion/interceptor v0.1.40 - github.com/pion/rtcp v1.2.15 - github.com/pion/rtp v1.8.20 - github.com/pion/sdp/v3 v3.0.14 - github.com/pion/srtp/v3 v3.0.6 + github.com/pion/interceptor v0.1.41 + github.com/pion/rtcp v1.2.16 + github.com/pion/rtp v1.8.24 + github.com/pion/sdp/v3 v3.0.16 + github.com/pion/srtp/v3 v3.0.8 github.com/pion/stun/v3 v3.0.0 - github.com/pion/webrtc/v4 v4.1.3 + github.com/pion/webrtc/v4 v4.1.6 github.com/rs/zerolog v1.34.0 github.com/sigurn/crc16 v0.0.0-20240131213347-83fcde1e29d1 github.com/sigurn/crc8 v0.0.0-20220107193325-2243fe600f9f - github.com/stretchr/testify v1.10.0 + github.com/stretchr/testify v1.11.1 github.com/tadglines/go-pkgs v0.0.0-20210623144937-b983b20f54f9 - golang.org/x/crypto v0.39.0 + golang.org/x/crypto v0.43.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -32,18 +32,18 @@ require ( github.com/kr/pretty v0.3.1 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/pion/datachannel v1.5.10 // indirect - github.com/pion/dtls/v3 v3.0.6 // indirect + github.com/pion/dtls/v3 v3.0.7 // indirect github.com/pion/logging v0.2.4 // indirect github.com/pion/mdns/v2 v2.0.7 // indirect github.com/pion/randutil v0.1.0 // indirect - github.com/pion/sctp v1.8.39 // indirect - github.com/pion/transport/v3 v3.0.7 // indirect - github.com/pion/turn/v4 v4.0.2 // indirect + github.com/pion/sctp v1.8.40 // indirect + github.com/pion/transport/v3 v3.0.8 // indirect + github.com/pion/turn/v4 v4.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/wlynxg/anet v0.0.5 // indirect - golang.org/x/mod v0.25.0 // indirect - golang.org/x/net v0.41.0 // indirect - golang.org/x/sync v0.15.0 // indirect - golang.org/x/sys v0.33.0 // indirect - golang.org/x/tools v0.34.0 // indirect + golang.org/x/mod v0.29.0 // indirect + golang.org/x/net v0.46.0 // indirect + golang.org/x/sync v0.17.0 // indirect + golang.org/x/sys v0.37.0 // indirect + golang.org/x/tools v0.38.0 // indirect ) diff --git a/go.sum b/go.sum index 7e1b0cee..c76fdb56 100644 --- a/go.sum +++ b/go.sum @@ -14,6 +14,8 @@ github.com/expr-lang/expr v1.17.2 h1:o0A99O/Px+/DTjEnQiodAgOIK9PPxL8DtXhBRKC+Iso github.com/expr-lang/expr v1.17.2/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/expr-lang/expr v1.17.5 h1:i1WrMvcdLF249nSNlpQZN1S6NXuW9WaOfF5tPi3aw3k= github.com/expr-lang/expr v1.17.5/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= +github.com/expr-lang/expr v1.17.6 h1:1h6i8ONk9cexhDmowO/A64VPxHScu7qfSl2k8OlINec= +github.com/expr-lang/expr v1.17.6/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -34,10 +36,14 @@ github.com/miekg/dns v1.1.63 h1:8M5aAw6OMZfFXTT7K5V0Eu5YiiL8l7nUAkyN6C9YwaY= github.com/miekg/dns v1.1.63/go.mod h1:6NGHfjhpmr5lt3XPLuyfDJi5AXbNIPM9PY6H6sF1Nfs= github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE= github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE= +github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA= +github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps= github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o= github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M= github.com/pion/dtls/v3 v3.0.6 h1:7Hkd8WhAJNbRgq9RgdNh1aaWlZlGpYTzdqjy9x9sK2E= github.com/pion/dtls/v3 v3.0.6/go.mod h1:iJxNQ3Uhn1NZWOMWlLxEEHAN5yX7GyPvvKw04v9bzYU= +github.com/pion/dtls/v3 v3.0.7 h1:bItXtTYYhZwkPFk4t1n3Kkf5TDrfj6+4wG+CZR8uI9Q= +github.com/pion/dtls/v3 v3.0.7/go.mod h1:uDlH5VPrgOQIw59irKYkMudSFprY9IEFCqz/eTz16f8= github.com/pion/ice/v4 v4.0.9 h1:VKgU4MwA2LUDVLq+WBkpEHTcAb8c5iCvFMECeuPOZNk= github.com/pion/ice/v4 v4.0.9/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw= github.com/pion/ice/v4 v4.0.10 h1:P59w1iauC/wPk9PdY8Vjl4fOFL5B+USq1+xbDcN6gT4= @@ -46,6 +52,8 @@ github.com/pion/interceptor v0.1.37 h1:aRA8Zpab/wE7/c0O3fh1PqY0AJI3fCSEM5lRWJVor github.com/pion/interceptor v0.1.37/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y= github.com/pion/interceptor v0.1.40 h1:e0BjnPcGpr2CFQgKhrQisBU7V3GXK6wrfYrGYaU6Jq4= github.com/pion/interceptor v0.1.40/go.mod h1:Z6kqH7M/FYirg3frjGJ21VLSRJGBXB/KqaTIrdqnOic= +github.com/pion/interceptor v0.1.41 h1:NpvX3HgWIukTf2yTBVjVGFXtpSpWgXjqz7IIpu7NsOw= +github.com/pion/interceptor v0.1.41/go.mod h1:nEt4187unvRXJFyjiw00GKo+kIuXMWQI9K89fsosDLY= github.com/pion/logging v0.2.3 h1:gHuf0zpoh1GW67Nr6Gj4cv5Z9ZscU7g/EaoC/Ke/igI= github.com/pion/logging v0.2.3/go.mod h1:z8YfknkquMe1csOrxK5kc+5/ZPAzMxbKLX5aXpbpC90= github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= @@ -56,34 +64,50 @@ github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo= github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0= +github.com/pion/rtcp v1.2.16 h1:fk1B1dNW4hsI78XUCljZJlC4kZOPk67mNRuQ0fcEkSo= +github.com/pion/rtcp v1.2.16/go.mod h1:/as7VKfYbs5NIb4h6muQ35kQF/J0ZVNz2Z3xKoCBYOo= github.com/pion/rtp v1.8.13 h1:8uSUPpjSL4OlwZI8Ygqu7+h2p9NPFB+yAZ461Xn5sNg= github.com/pion/rtp v1.8.13/go.mod h1:8uMBJj32Pa1wwx8Fuv/AsFhn8jsgw+3rUC2PfoBZ8p4= github.com/pion/rtp v1.8.20 h1:8zcyqohadZE8FCBeGdyEvHiclPIezcwRQH9zfapFyYI= github.com/pion/rtp v1.8.20/go.mod h1:bAu2UFKScgzyFqvUKmbvzSdPr+NGbZtv6UB2hesqXBk= +github.com/pion/rtp v1.8.24 h1:+ICyZXUQDv95EsHN70RrA4XKJf5MGWyC6QQc1u6/ynI= +github.com/pion/rtp v1.8.24/go.mod h1:rF5nS1GqbR7H/TCpKwylzeq6yDM+MM6k+On5EgeThEM= github.com/pion/sctp v1.8.37 h1:ZDmGPtRPX9mKCiVXtMbTWybFw3z/hVKAZgU81wcOrqs= github.com/pion/sctp v1.8.37/go.mod h1:cNiLdchXra8fHQwmIoqw0MbLLMs+f7uQ+dGMG2gWebE= github.com/pion/sctp v1.8.39 h1:PJma40vRHa3UTO3C4MyeJDQ+KIobVYRZQZ0Nt7SjQnE= github.com/pion/sctp v1.8.39/go.mod h1:cNiLdchXra8fHQwmIoqw0MbLLMs+f7uQ+dGMG2gWebE= +github.com/pion/sctp v1.8.40 h1:bqbgWYOrUhsYItEnRObUYZuzvOMsVplS3oNgzedBlG8= +github.com/pion/sctp v1.8.40/go.mod h1:SPBBUENXE6ThkEksN5ZavfAhFYll+h+66ZiG6IZQuzo= github.com/pion/sdp/v3 v3.0.11 h1:VhgVSopdsBKwhCFoyyPmT1fKMeV9nLMrEKxNOdy3IVI= github.com/pion/sdp/v3 v3.0.11/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E= github.com/pion/sdp/v3 v3.0.14 h1:1h7gBr9FhOWH5GjWWY5lcw/U85MtdcibTyt/o6RxRUI= github.com/pion/sdp/v3 v3.0.14/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E= +github.com/pion/sdp/v3 v3.0.16 h1:0dKzYO6gTAvuLaAKQkC02eCPjMIi4NuAr/ibAwrGDCo= +github.com/pion/sdp/v3 v3.0.16/go.mod h1:9tyKzznud3qiweZcD86kS0ff1pGYB3VX+Bcsmkx6IXo= github.com/pion/srtp/v3 v3.0.4 h1:2Z6vDVxzrX3UHEgrUyIGM4rRouoC7v+NiF1IHtp9B5M= github.com/pion/srtp/v3 v3.0.4/go.mod h1:1Jx3FwDoxpRaTh1oRV8A/6G1BnFL+QI82eK4ms8EEJQ= github.com/pion/srtp/v3 v3.0.6 h1:E2gyj1f5X10sB/qILUGIkL4C2CqK269Xq167PbGCc/4= github.com/pion/srtp/v3 v3.0.6/go.mod h1:BxvziG3v/armJHAaJ87euvkhHqWe9I7iiOy50K2QkhY= +github.com/pion/srtp/v3 v3.0.8 h1:RjRrjcIeQsilPzxvdaElN0CpuQZdMvcl9VZ5UY9suUM= +github.com/pion/srtp/v3 v3.0.8/go.mod h1:2Sq6YnDH7/UDCvkSoHSDNDeyBcFgWL0sAVycVbAsXFg= github.com/pion/stun/v3 v3.0.0 h1:4h1gwhWLWuZWOJIJR9s2ferRO+W3zA/b6ijOI6mKzUw= github.com/pion/stun/v3 v3.0.0/go.mod h1:HvCN8txt8mwi4FBvS3EmDghW6aQJ24T+y+1TKjB5jyU= github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= +github.com/pion/transport/v3 v3.0.8 h1:oI3myyYnTKUSTthu/NZZ8eu2I5sHbxbUNNFW62olaYc= +github.com/pion/transport/v3 v3.0.8/go.mod h1:+c2eewC5WJQHiAA46fkMMzoYZSuGzA/7E2FPrOYHctQ= github.com/pion/turn/v4 v4.0.0 h1:qxplo3Rxa9Yg1xXDxxH8xaqcyGUtbHYw4QSCvmFWvhM= github.com/pion/turn/v4 v4.0.0/go.mod h1:MuPDkm15nYSklKpN8vWJ9W2M0PlyQZqYt1McGuxG7mA= github.com/pion/turn/v4 v4.0.2 h1:ZqgQ3+MjP32ug30xAbD6Mn+/K4Sxi3SdNOTFf+7mpps= github.com/pion/turn/v4 v4.0.2/go.mod h1:pMMKP/ieNAG/fN5cZiN4SDuyKsXtNTr0ccN7IToA1zs= +github.com/pion/turn/v4 v4.1.1 h1:9UnY2HB99tpDyz3cVVZguSxcqkJ1DsTSZ+8TGruh4fc= +github.com/pion/turn/v4 v4.1.1/go.mod h1:2123tHk1O++vmjI5VSD0awT50NywDAq5A2NNNU4Jjs8= github.com/pion/webrtc/v4 v4.0.14 h1:nyds/sFRR+HvmWoBa6wrL46sSfpArE0qR883MBW96lg= github.com/pion/webrtc/v4 v4.0.14/go.mod h1:R3+qTnQTS03UzwDarYecgioNf7DYgTsldxnCXB821Kk= github.com/pion/webrtc/v4 v4.1.3 h1:YZ67Boj9X/hk190jJZ8+HFGQ6DqSZ/fYP3sLAZv7c3c= github.com/pion/webrtc/v4 v4.1.3/go.mod h1:rsq+zQ82ryfR9vbb0L1umPJ6Ogq7zm8mcn9fcGnxomM= +github.com/pion/webrtc/v4 v4.1.6 h1:srHH2HwvCGwPba25EYJgUzgLqCQoXl1VCUnrGQMSzUw= +github.com/pion/webrtc/v4 v4.1.6/go.mod h1:wKecGRlkl3ox/As/MYghJL+b/cVXMEhoPMJWPuGQFhU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.4.0/go.mod h1:NWz/XGvpEW1FyYQ7fCx4dqYBLlfTcE+A9FLAkNKqjFE= @@ -102,6 +126,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/tadglines/go-pkgs v0.0.0-20210623144937-b983b20f54f9 h1:aeN+ghOV0b2VCmKKO3gqnDQ8mLbpABZgRR2FVYx4ouI= github.com/tadglines/go-pkgs v0.0.0-20210623144937-b983b20f54f9/go.mod h1:roo6cZ/uqpwKMuvPG0YmzI5+AmUiMWfjCBZpGXqbTxE= github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= @@ -110,18 +136,26 @@ golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= +golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= +golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= +golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -129,10 +163,14 @@ golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= +golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= +golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= +golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From be80eb1ac98dd4d11dcf171cbb33e1fdd4974285 Mon Sep 17 00:00:00 2001 From: Alex X Date: Tue, 21 Oct 2025 15:32:37 +0300 Subject: [PATCH 14/14] Update version to 1.9.11 --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 0cfc31fb..fe9eb004 100644 --- a/main.go +++ b/main.go @@ -44,7 +44,7 @@ import ( ) func main() { - app.Version = "1.9.10" + app.Version = "1.9.11" // 1. Core modules: app, api/ws, streams