@@ -116,20 +116,39 @@ func findFmtpLine(payloadType uint8, descriptions []*sdp.MediaDescription) strin
116116// urlParse fix bugs:
117117// 1. Content-Base: rtsp://::ffff:192.168.1.123/onvif/profile.1/
118118// 2. Content-Base: rtsp://rtsp://turret2-cam.lan:554/stream1/
119+ // 3. Content-Base: 192.168.253.220:1935/
119120func urlParse (rawURL string ) (* url.URL , error ) {
120121 // fix https://github.com/AlexxIT/go2rtc/issues/830
121122 if strings .HasPrefix (rawURL , "rtsp://rtsp://" ) {
122123 rawURL = rawURL [7 :]
123124 }
124125
126+ // fix https://github.com/AlexxIT/go2rtc/issues/1852
127+ if ! strings .Contains (rawURL , "://" ) {
128+ rawURL = "rtsp://" + rawURL
129+ }
130+
125131 u , err := url .Parse (rawURL )
126132 if err != nil && strings .HasSuffix (err .Error (), "after host" ) {
127- if i1 := strings .Index (rawURL , "://" ); i1 > 0 {
128- if i2 := strings .IndexByte (rawURL [i1 + 3 :], '/' ); i2 > 0 {
129- return urlParse (rawURL [:i1 + 3 + i2 ] + ":" + rawURL [i1 + 3 + i2 :])
130- }
133+ if i := indexN (rawURL , '/' , 3 ); i > 0 {
134+ return urlParse (rawURL [:i ] + ":" + rawURL [i :])
131135 }
132136 }
133137
134138 return u , err
135139}
140+
141+ func indexN (s string , c byte , n int ) int {
142+ var offset int
143+ for {
144+ i := strings .IndexByte (s [offset :], c )
145+ if i < 0 {
146+ break
147+ }
148+ if n -- ; n == 0 {
149+ return offset + i
150+ }
151+ offset += i + 1
152+ }
153+ return - 1
154+ }
0 commit comments