diff --git a/cmd/rtsp/rtsp.go b/cmd/rtsp/rtsp.go index e1c78bd6..f5d54440 100644 --- a/cmd/rtsp/rtsp.go +++ b/cmd/rtsp/rtsp.go @@ -1,6 +1,10 @@ package rtsp import ( + "net" + "net/url" + "strings" + "github.com/AlexxIT/go2rtc/cmd/app" "github.com/AlexxIT/go2rtc/cmd/streams" "github.com/AlexxIT/go2rtc/pkg/core" @@ -8,9 +12,6 @@ import ( "github.com/AlexxIT/go2rtc/pkg/rtsp" "github.com/AlexxIT/go2rtc/pkg/tcp" "github.com/rs/zerolog" - "net" - "net/url" - "strings" ) func Init() { @@ -123,6 +124,7 @@ func rtspHandler(url string) (core.Producer, error) { if !backchannel { return nil, err } + log.Trace().Msgf("[rtsp] describe (backchannel=%t) err: %v", backchannel, err) // second try without backchannel, we need to reconnect conn.Backchannel = false diff --git a/pkg/rtsp/helpers.go b/pkg/rtsp/helpers.go index 726e4c80..2118b405 100644 --- a/pkg/rtsp/helpers.go +++ b/pkg/rtsp/helpers.go @@ -2,14 +2,15 @@ package rtsp import ( "bytes" - "github.com/AlexxIT/go2rtc/pkg/core" - "github.com/pion/rtcp" - "github.com/pion/sdp/v3" "io" "net/url" "regexp" "strconv" "strings" + + "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/pion/rtcp" + "github.com/pion/sdp/v3" ) type RTCP struct { @@ -35,6 +36,10 @@ func UnmarshalSDP(rawSDP []byte) ([]*core.Media, error) { rawSDP = append([]byte(sdpHeader), rawSDP[i:]...) } + // Fix invalid media type (errSDPInvalidValue) caused by + // some TP-LINK IP camera, e.g. TL-IPC44GW + rawSDP = bytes.ReplaceAll(rawSDP, []byte("m=application/TP-LINK "), []byte("m=application ")) + if err == io.EOF { rawSDP = append(rawSDP, '\n') }