From dbfc058f0c685e2cfdbea4b83243c7f27385e1c2 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Thu, 9 Sep 2021 23:05:50 +0200 Subject: [PATCH] update golangci-lint --- .golangci.yml | 1 + clientconn.go | 6 ++-- pkg/base/header_test.go | 6 ++-- pkg/base/response.go | 4 ++- pkg/headers/authenticate_test.go | 14 ++++++--- pkg/headers/rtpinfo_test.go | 18 +++++++---- pkg/headers/transport.go | 3 +- pkg/rtph264/decoder.go | 3 +- pkg/sdp/sdp_test.go | 52 +++++++++++++++++++++----------- server.go | 9 ++++-- server_test.go | 6 ++-- track_test.go | 38 ++++++++++++++--------- 12 files changed, 106 insertions(+), 54 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 9ab04e06..5c7573c1 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -9,6 +9,7 @@ linters: - gofumpt - golint - misspell + - lll - prealloc - unconvert disable: diff --git a/clientconn.go b/clientconn.go index 47e009f0..8d4a1f45 100644 --- a/clientconn.go +++ b/clientconn.go @@ -1350,12 +1350,14 @@ func (cc *ClientConn) doSetup( return nil, liberrors.ErrClientTransportHeaderNoDestination{} } - rtpListener, err = newClientConnUDPListener(cc, true, thRes.Destination.String()+":"+strconv.FormatInt(int64(thRes.Ports[0]), 10)) + rtpListener, err = newClientConnUDPListener(cc, true, + thRes.Destination.String()+":"+strconv.FormatInt(int64(thRes.Ports[0]), 10)) if err != nil { return nil, err } - rtcpListener, err = newClientConnUDPListener(cc, true, thRes.Destination.String()+":"+strconv.FormatInt(int64(thRes.Ports[1]), 10)) + rtcpListener, err = newClientConnUDPListener(cc, true, + thRes.Destination.String()+":"+strconv.FormatInt(int64(thRes.Ports[1]), 10)) if err != nil { rtpListener.close() return nil, err diff --git a/pkg/base/header_test.go b/pkg/base/header_test.go index 4c62042d..c7a5d768 100644 --- a/pkg/base/header_test.go +++ b/pkg/base/header_test.go @@ -29,10 +29,12 @@ var casesHeader = []struct { }, { "multiple", - []byte("WWW-Authenticate: Digest realm=\"4419b63f5e51\", nonce=\"8b84a3b789283a8bea8da7fa7d41f08b\", stale=\"FALSE\"\r\n" + + []byte("WWW-Authenticate: Digest realm=\"4419b63f5e51\", " + + "nonce=\"8b84a3b789283a8bea8da7fa7d41f08b\", stale=\"FALSE\"\r\n" + "WWW-Authenticate: Basic realm=\"4419b63f5e51\"\r\n" + "\r\n"), - []byte("WWW-Authenticate: Digest realm=\"4419b63f5e51\", nonce=\"8b84a3b789283a8bea8da7fa7d41f08b\", stale=\"FALSE\"\r\n" + + []byte("WWW-Authenticate: Digest realm=\"4419b63f5e51\", " + + "nonce=\"8b84a3b789283a8bea8da7fa7d41f08b\", stale=\"FALSE\"\r\n" + "WWW-Authenticate: Basic realm=\"4419b63f5e51\"\r\n" + "\r\n"), Header{ diff --git a/pkg/base/response.go b/pkg/base/response.go index 8a662ad0..3f15e6b9 100644 --- a/pkg/base/response.go +++ b/pkg/base/response.go @@ -214,7 +214,9 @@ func (res Response) Write(bw *bufio.Writer) error { } } - _, err := bw.Write([]byte(rtspProtocol10 + " " + strconv.FormatInt(int64(res.StatusCode), 10) + " " + res.StatusMessage + "\r\n")) + _, err := bw.Write([]byte(rtspProtocol10 + " " + + strconv.FormatInt(int64(res.StatusCode), 10) + " " + + res.StatusMessage + "\r\n")) if err != nil { return err } diff --git a/pkg/headers/authenticate_test.go b/pkg/headers/authenticate_test.go index f68ee558..44b532a7 100644 --- a/pkg/headers/authenticate_test.go +++ b/pkg/headers/authenticate_test.go @@ -116,8 +116,12 @@ var casesAuthenticate = []struct { }, { "digest response with empty field", - base.HeaderValue{`Digest username="", realm="IPCAM", nonce="5d17cd12b9fa8a85ac5ceef0926ea5a6", uri="rtsp://localhost:8554/mystream", response="c072ae90eb4a27f4cdcb90d62266b2a1"`}, - base.HeaderValue{`Digest username="", realm="IPCAM", nonce="5d17cd12b9fa8a85ac5ceef0926ea5a6", uri="rtsp://localhost:8554/mystream", response="c072ae90eb4a27f4cdcb90d62266b2a1"`}, + base.HeaderValue{`Digest username="", realm="IPCAM", ` + + `nonce="5d17cd12b9fa8a85ac5ceef0926ea5a6", uri="rtsp://localhost:8554/mystream", ` + + `response="c072ae90eb4a27f4cdcb90d62266b2a1"`}, + base.HeaderValue{`Digest username="", realm="IPCAM", ` + + `nonce="5d17cd12b9fa8a85ac5ceef0926ea5a6", uri="rtsp://localhost:8554/mystream", ` + + `response="c072ae90eb4a27f4cdcb90d62266b2a1"`}, Authenticate{ Method: AuthDigest, Username: func() *string { @@ -144,8 +148,10 @@ var casesAuthenticate = []struct { }, { "digest response with no spaces and additional fields", - base.HeaderValue{`Digest realm="Please log in with a valid username",nonce="752a62306daf32b401a41004555c7663",opaque="",stale=FALSE,algorithm=MD5`}, - base.HeaderValue{`Digest realm="Please log in with a valid username", nonce="752a62306daf32b401a41004555c7663", opaque="", stale="FALSE", algorithm="MD5"`}, + base.HeaderValue{`Digest realm="Please log in with a valid username",` + + `nonce="752a62306daf32b401a41004555c7663",opaque="",stale=FALSE,algorithm=MD5`}, + base.HeaderValue{`Digest realm="Please log in with a valid username", ` + + `nonce="752a62306daf32b401a41004555c7663", opaque="", stale="FALSE", algorithm="MD5"`}, Authenticate{ Method: AuthDigest, Realm: func() *string { diff --git a/pkg/headers/rtpinfo_test.go b/pkg/headers/rtpinfo_test.go index 664c9f53..3c4ee10b 100644 --- a/pkg/headers/rtpinfo_test.go +++ b/pkg/headers/rtpinfo_test.go @@ -34,8 +34,10 @@ var casesRTPInfo = []struct { }, { "multiple value", - base.HeaderValue{`url=rtsp://127.0.0.1/test.mkv/track1;seq=35243;rtptime=717574556,url=rtsp://127.0.0.1/test.mkv/track2;seq=13655;rtptime=2848846950`}, - base.HeaderValue{`url=rtsp://127.0.0.1/test.mkv/track1;seq=35243;rtptime=717574556,url=rtsp://127.0.0.1/test.mkv/track2;seq=13655;rtptime=2848846950`}, + base.HeaderValue{`url=rtsp://127.0.0.1/test.mkv/track1;seq=35243;rtptime=717574556,` + + `url=rtsp://127.0.0.1/test.mkv/track2;seq=13655;rtptime=2848846950`}, + base.HeaderValue{`url=rtsp://127.0.0.1/test.mkv/track1;seq=35243;rtptime=717574556,` + + `url=rtsp://127.0.0.1/test.mkv/track2;seq=13655;rtptime=2848846950`}, RTPInfo{ { URL: "rtsp://127.0.0.1/test.mkv/track1", @@ -109,8 +111,10 @@ var casesRTPInfo = []struct { }, { "with space", - base.HeaderValue{`url=rtsp://10.13.146.53/axis-media/media.amp/trackID=1;seq=58477;rtptime=1020884293, url=rtsp://10.13.146.53/axis-media/media.amp/trackID=2;seq=15727;rtptime=1171661503`}, - base.HeaderValue{`url=rtsp://10.13.146.53/axis-media/media.amp/trackID=1;seq=58477;rtptime=1020884293,url=rtsp://10.13.146.53/axis-media/media.amp/trackID=2;seq=15727;rtptime=1171661503`}, + base.HeaderValue{`url=rtsp://10.13.146.53/axis-media/media.amp/trackID=1;` + + `seq=58477;rtptime=1020884293, url=rtsp://10.13.146.53/axis-media/media.amp/trackID=2;seq=15727;rtptime=1171661503`}, + base.HeaderValue{`url=rtsp://10.13.146.53/axis-media/media.amp/trackID=1;` + + `seq=58477;rtptime=1020884293,url=rtsp://10.13.146.53/axis-media/media.amp/trackID=2;seq=15727;rtptime=1171661503`}, RTPInfo{ { URL: "rtsp://10.13.146.53/axis-media/media.amp/trackID=1", @@ -138,8 +142,10 @@ var casesRTPInfo = []struct { }, { "with session", - base.HeaderValue{`url=trackID=1;seq=55664;rtptime=254718369;ssrc=56597976,url=trackID=2;seq=43807;rtptime=1702259566;ssrc=ee839a80`}, - base.HeaderValue{`url=trackID=1;seq=55664;rtptime=254718369,url=trackID=2;seq=43807;rtptime=1702259566`}, + base.HeaderValue{`url=trackID=1;seq=55664;rtptime=254718369;ssrc=56597976,` + + `url=trackID=2;seq=43807;rtptime=1702259566;ssrc=ee839a80`}, + base.HeaderValue{`url=trackID=1;seq=55664;rtptime=254718369,` + + `url=trackID=2;seq=43807;rtptime=1702259566`}, RTPInfo{ { URL: "trackID=1", diff --git a/pkg/headers/transport.go b/pkg/headers/transport.go index 308deaf0..a02d7319 100644 --- a/pkg/headers/transport.go +++ b/pkg/headers/transport.go @@ -240,7 +240,8 @@ func (h Transport) Write() base.HeaderValue { } if h.InterleavedIDs != nil { - rets = append(rets, "interleaved="+strconv.FormatInt(int64(h.InterleavedIDs[0]), 10)+"-"+strconv.FormatInt(int64(h.InterleavedIDs[1]), 10)) + rets = append(rets, "interleaved="+strconv.FormatInt(int64(h.InterleavedIDs[0]), 10)+ + "-"+strconv.FormatInt(int64(h.InterleavedIDs[1]), 10)) } if h.Ports != nil { diff --git a/pkg/rtph264/decoder.go b/pkg/rtph264/decoder.go index 546c1c24..c7d35963 100644 --- a/pkg/rtph264/decoder.go +++ b/pkg/rtph264/decoder.go @@ -18,7 +18,8 @@ var ErrMorePacketsNeeded = errors.New("need more packets") // packet of a fragmented NALU and we didn't received anything before. // It's normal to receive this when we are decoding a stream that has been already // running for some time. -var ErrNonStartingPacketAndNoPrevious = errors.New("decoded a non-starting fragmented packet without any previous starting packet") +var ErrNonStartingPacketAndNoPrevious = errors.New( + "decoded a non-starting fragmented packet without any previous starting packet") // PacketConnReader creates a io.Reader around a net.PacketConn. type PacketConnReader struct { diff --git a/pkg/sdp/sdp_test.go b/pkg/sdp/sdp_test.go index 8faf352b..38f2472f 100644 --- a/pkg/sdp/sdp_test.go +++ b/pkg/sdp/sdp_test.go @@ -367,7 +367,8 @@ var cases = []struct { "s=SDP Seminar\r\n" + "m=video 0 RTP/AVP/TCP 96\r\n" + "a=rtpmap:96 H265/90000\r\n" + - "a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;\r\n" + + "a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; " + + "sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;\r\n" + "a=control:streamid=0\r\n" + "m=audio 0 RTP/AVP/TCP 97\r\n" + "a=rtpmap:97 mpeg4-generic/44100/2\r\n" + @@ -378,7 +379,8 @@ var cases = []struct { "s=SDP Seminar\r\n" + "m=video 0 RTP/AVP/TCP 96\r\n" + "a=rtpmap:96 H265/90000\r\n" + - "a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;\r\n" + + "a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; " + + "sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;\r\n" + "a=control:streamid=0\r\n" + "m=audio 0 RTP/AVP/TCP 97\r\n" + "a=rtpmap:97 mpeg4-generic/44100/2\r\n" + @@ -404,7 +406,8 @@ var cases = []struct { }, Attributes: []psdp.Attribute{ {"rtpmap", "96 H265/90000"}, - {"fmtp", "96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;"}, + {"fmtp", "96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; " + + "sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;"}, {"control", "streamid=0"}, }, }, @@ -430,7 +433,8 @@ var cases = []struct { "s=SDP Seminar\r\n" + "m=video 0 RTP/AVP/TCP 96\r\n" + "a=rtpmap:96 H265/90000\r\n" + - "a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;\r\n" + + "a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; " + + "sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;\r\n" + "a=control:streamid=0\r\n" + "m=audio 0 RTP/AVP/TCP 97\r\n" + "a=rtpmap:97 mpeg4-generic/44100/2\r\n" + @@ -441,7 +445,8 @@ var cases = []struct { "s=SDP Seminar\r\n" + "m=video 0 RTP/AVP/TCP 96\r\n" + "a=rtpmap:96 H265/90000\r\n" + - "a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;\r\n" + + "a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; " + + "sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;\r\n" + "a=control:streamid=0\r\n" + "m=audio 0 RTP/AVP/TCP 97\r\n" + "a=rtpmap:97 mpeg4-generic/44100/2\r\n" + @@ -459,7 +464,8 @@ var cases = []struct { }, Attributes: []psdp.Attribute{ {"rtpmap", "96 H265/90000"}, - {"fmtp", "96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;"}, + {"fmtp", "96 sprop-vps=QAEMAf//AWAAAAMAsAAAAwAAAwB4FwJA; " + + "sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB4oAKggC8c1YgXuRZFL/y5/E/qbgQEBAE=; sprop-pps=RAHAcvBTJA==;"}, {"control", "streamid=0"}, }, }, @@ -587,7 +593,8 @@ var cases = []struct { "a=control:trackID=1\r\n" + "a=recvonly\r\n" + "a=framerate:25.0\r\n" + - "a=fmtp:105 packetization-mode=1; profile-level-id=640028; sprop-parameter-sets=Z2QAKKwa0A8ARPy4CIAAAAMAgAAADLWgAtwAHJ173CPFCKg=,KO4ESSJAAAAAAAAAAA==\r\n"), + "a=fmtp:105 packetization-mode=1; profile-level-id=640028; " + + "sprop-parameter-sets=Z2QAKKwa0A8ARPy4CIAAAAMAgAAADLWgAtwAHJ173CPFCKg=,KO4ESSJAAAAAAAAAAA==\r\n"), []byte("v=0\r\n" + "o=- 12345 1 IN IP4 10.21.61.139\r\n" + "s=Sony RTSP Server\r\n" + @@ -599,7 +606,8 @@ var cases = []struct { "a=control:trackID=1\r\n" + "a=recvonly\r\n" + "a=framerate:25.0\r\n" + - "a=fmtp:105 packetization-mode=1; profile-level-id=640028; sprop-parameter-sets=Z2QAKKwa0A8ARPy4CIAAAAMAgAAADLWgAtwAHJ173CPFCKg=,KO4ESSJAAAAAAAAAAA==\r\n"), + "a=fmtp:105 packetization-mode=1; profile-level-id=640028; " + + "sprop-parameter-sets=Z2QAKKwa0A8ARPy4CIAAAAMAgAAADLWgAtwAHJ173CPFCKg=,KO4ESSJAAAAAAAAAAA==\r\n"), SessionDescription{ Origin: psdp.Origin{ Username: "-", @@ -632,7 +640,8 @@ var cases = []struct { {"control", "trackID=1"}, {"recvonly", ""}, {"framerate", "25.0"}, - {"fmtp", "105 packetization-mode=1; profile-level-id=640028; sprop-parameter-sets=Z2QAKKwa0A8ARPy4CIAAAAMAgAAADLWgAtwAHJ173CPFCKg=,KO4ESSJAAAAAAAAAAA=="}, + {"fmtp", "105 packetization-mode=1; profile-level-id=640028; " + + "sprop-parameter-sets=Z2QAKKwa0A8ARPy4CIAAAAMAgAAADLWgAtwAHJ173CPFCKg=,KO4ESSJAAAAAAAAAAA=="}, }, }, }, @@ -653,7 +662,8 @@ var cases = []struct { "m=audio 0 RTP/AVP 96\r\n" + "b=RR:0\r\n" + "a=rtpmap:96 mpeg4-generic/22050\r\n" + - "a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1388; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;\r\n" + + "a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; " + + "config=1388; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;\r\n" + "m=video 0 RTP/AVP 96\r\n" + "b=RR:0\r\n" + "a=rtpmap:96 H264/90000\r\n" + @@ -671,7 +681,8 @@ var cases = []struct { "m=audio 0 RTP/AVP 96\r\n" + "b=RR:0\r\n" + "a=rtpmap:96 mpeg4-generic/22050\r\n" + - "a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1388; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;\r\n" + + "a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; " + + "config=1388; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;\r\n" + "m=video 0 RTP/AVP 96\r\n" + "b=RR:0\r\n" + "a=rtpmap:96 H264/90000\r\n" + @@ -717,7 +728,8 @@ var cases = []struct { }, Attributes: []psdp.Attribute{ {"rtpmap", "96 mpeg4-generic/22050"}, - {"fmtp", "96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1388; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;"}, + {"fmtp", "96 streamtype=5; profile-level-id=15; " + + "mode=AAC-hbr; config=1388; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;"}, }, }, { @@ -1086,7 +1098,8 @@ var cases = []struct { "m=video 0 RTP/AVP 96\r\n" + "i=Video Media\r\n" + "a=rtpmap:96 H264/90000\r\n" + - "a=fmtp:96 profile-level-id=4D0014;packetization-mode=0;sprop-parameter-sets=Z01AHppmBYHv81BgYGQAAA+gAAF3ABA=,aO48gA==\r\n" + + "a=fmtp:96 profile-level-id=4D0014;packetization-mode=0;" + + "sprop-parameter-sets=Z01AHppmBYHv81BgYGQAAA+gAAF3ABA=,aO48gA==\r\n" + "a=control:trackID=video\r\n" + "a=Media_header:MEDIAINFO=494D4B48010100000400000100000000000000000000000000000000000000000000000000000000;\r\n" + "a=appversion:1.0\r\n"), @@ -1102,7 +1115,8 @@ var cases = []struct { "m=video 0 RTP/AVP 96\r\n" + "i=Video Media\r\n" + "a=rtpmap:96 H264/90000\r\n" + - "a=fmtp:96 profile-level-id=4D0014;packetization-mode=0;sprop-parameter-sets=Z01AHppmBYHv81BgYGQAAA+gAAF3ABA=,aO48gA==\r\n" + + "a=fmtp:96 profile-level-id=4D0014;packetization-mode=0;" + + "sprop-parameter-sets=Z01AHppmBYHv81BgYGQAAA+gAAF3ABA=,aO48gA==\r\n" + "a=control:trackID=video\r\n" + "a=Media_header:MEDIAINFO=494D4B48010100000400000100000000000000000000000000000000000000000000000000000000;\r\n" + "a=appversion:1.0\r\n"), @@ -1160,16 +1174,18 @@ var cases = []struct { Value: "96 H264/90000", }, { - Key: "fmtp", - Value: "96 profile-level-id=4D0014;packetization-mode=0;sprop-parameter-sets=Z01AHppmBYHv81BgYGQAAA+gAAF3ABA=,aO48gA==", + Key: "fmtp", + Value: "96 profile-level-id=4D0014;packetization-mode=0;" + + "sprop-parameter-sets=Z01AHppmBYHv81BgYGQAAA+gAAF3ABA=,aO48gA==", }, { Key: "control", Value: "trackID=video", }, { - Key: "Media_header", - Value: "MEDIAINFO=494D4B48010100000400000100000000000000000000000000000000000000000000000000000000;", + Key: "Media_header", + Value: "MEDIAINFO=494D4B480101000004000001000000000000000000000000" + + "00000000000000000000000000000000;", }, { Key: "appversion", diff --git a/server.go b/server.go index a98e70e1..20d0d523 100644 --- a/server.go +++ b/server.go @@ -89,13 +89,16 @@ type Server struct { // If UDPRTPAddress and UDPRTCPAddress are filled, the server can read and write UDP streams. UDPRTCPAddress string // a range of multicast IPs to use. - // If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server can read and write UDP-multicast streams. + // If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server + // can read and write UDP-multicast streams. MulticastIPRange string // a port to send RTP packets with UDP-multicast. - // If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server can read and write UDP-multicast streams. + // If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server + // can read and write UDP-multicast streams. MulticastRTPPort int // a port to send RTCP packets with UDP-multicast. - // If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server can read and write UDP-multicast streams. + // If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server + // can read and write UDP-multicast streams. MulticastRTCPPort int // read buffer count. // If greater than 1, allows to pass buffers to routines different than the one diff --git a/server_test.go b/server_test.go index af882f67..5440c3d1 100644 --- a/server_test.go +++ b/server_test.go @@ -431,7 +431,8 @@ func TestServerHighLevelPublishRead(t *testing.T) { cnt1, err := newContainer("gstreamer", "publish", []string{ "filesrc location=emptyvideo.mkv ! matroskademux ! video/x-h264 ! rtspclientsink " + - "location=" + proto + "://127.0.0.1:8554/teststream protocols=" + ts + " tls-validation-flags=0 latency=0 timeout=0 rtx-time=0", + "location=" + proto + "://127.0.0.1:8554/teststream protocols=" + ts + + " tls-validation-flags=0 latency=0 timeout=0 rtx-time=0", }) require.NoError(t, err) defer cnt1.close() @@ -476,7 +477,8 @@ func TestServerHighLevelPublishRead(t *testing.T) { }() cnt2, err := newContainer("gstreamer", "read", []string{ - "rtspsrc location=" + proto + "://127.0.0.1:8554/teststream protocols=" + ts + " tls-validation-flags=0 latency=0 " + + "rtspsrc location=" + proto + "://127.0.0.1:8554/teststream protocols=" + ts + + " tls-validation-flags=0 latency=0 " + "! application/x-rtp,media=video ! decodebin ! exitafterframe ! fakesink", }) require.NoError(t, err) diff --git a/track_test.go b/track_test.go index 4955c8eb..e9914132 100644 --- a/track_test.go +++ b/track_test.go @@ -66,8 +66,10 @@ func TestTrackURL(t *testing.T) { "m=video 0 RTP/AVP 96\r\n" + "a=rtpmap:96 H264/90000\r\n" + "a=control:trackID=5"), - mustParseURL("rtsp://myuser:mypass@192.168.1.99:554/test?user=tmp&password=BagRep1&channel=1&stream=0.sdp"), - mustParseURL("rtsp://myuser:mypass@192.168.1.99:554/test?user=tmp&password=BagRep1&channel=1&stream=0.sdp/trackID=5"), + mustParseURL("rtsp://myuser:mypass@192.168.1.99:554/" + + "test?user=tmp&password=BagRep1&channel=1&stream=0.sdp"), + mustParseURL("rtsp://myuser:mypass@192.168.1.99:554/" + + "test?user=tmp&password=BagRep1&channel=1&stream=0.sdp/trackID=5"), }, { "relative control, url with special chars and query", @@ -75,8 +77,10 @@ func TestTrackURL(t *testing.T) { "m=video 0 RTP/AVP 96\r\n" + "a=rtpmap:96 H264/90000\r\n" + "a=control:trackID=5"), - mustParseURL("rtsp://myuser:mypass@192.168.1.99:554/te!st?user=tmp&password=BagRep1!&channel=1&stream=0.sdp"), - mustParseURL("rtsp://myuser:mypass@192.168.1.99:554/te!st?user=tmp&password=BagRep1!&channel=1&stream=0.sdp/trackID=5"), + mustParseURL("rtsp://myuser:mypass@192.168.1.99:554/" + + "te!st?user=tmp&password=BagRep1!&channel=1&stream=0.sdp"), + mustParseURL("rtsp://myuser:mypass@192.168.1.99:554/" + + "te!st?user=tmp&password=BagRep1!&channel=1&stream=0.sdp/trackID=5"), }, { "relative control, url with query without question mark", @@ -135,7 +139,8 @@ func TestTrackClockRate(t *testing.T) { "a=rtpmap:96 H264/90000 \r\n" + "a=range:npt=0-\r\n" + "a=framerate:0S\r\n" + - "a=fmtp:96 profile-level-id=64000c; packetization-mode=1; sprop-parameter-sets=Z2QADKw7ULBLQgAAAwACAAADAD0I,aO48gA==\r\n" + + "a=fmtp:96 profile-level-id=64000c; packetization-mode=1; " + + "sprop-parameter-sets=Z2QADKw7ULBLQgAAAwACAAADAD0I,aO48gA==\r\n" + "a=framerate:25\r\n" + "a=control:trackID=3\r\n"), 90000, @@ -195,7 +200,8 @@ func TestTrackClockRate(t *testing.T) { "a=control:trackID=1\r\n" + "b=AS:0\r\n" + "a=rtpmap:98 H265/90000\r\n" + - "a=fmtp:98 profile-id=1; sprop-vps=QAEMAf//AWAAAAMAAAMAAAMAAAMAlqwJ; sprop-sps=QgEBAWAAAAMAAAMAAAMAAAMAlqADwIAQ5Za5JMmuWcBSSgAAB9AAAHUwgkA=; sprop-pps=RAHgdrAwxmQ=\r\n" + + "a=fmtp:98 profile-id=1; sprop-vps=QAEMAf//AWAAAAMAAAMAAAMAAAMAlqwJ; " + + "sprop-sps=QgEBAWAAAAMAAAMAAAMAAAMAlqADwIAQ5Za5JMmuWcBSSgAAB9AAAHUwgkA=; sprop-pps=RAHgdrAwxmQ=\r\n" + "m=application 0 RTP/AVP 107\r\n" + "a=control:trackID=3\r\n" + "a=rtpmap:107 vnd.onvif.metadata/90000"), @@ -240,8 +246,9 @@ func TestTrackH264New(t *testing.T) { Value: "96 H264/90000", }, { - Key: "fmtp", - Value: "96 packetization-mode=1; sprop-parameter-sets=Z2QADKw7ULBLQgAAAwACAAADAD0I,aO48gA==; profile-level-id=64000C", + Key: "fmtp", + Value: "96 packetization-mode=1; " + + "sprop-parameter-sets=Z2QADKw7ULBLQgAAAwACAAADAD0I,aO48gA==; profile-level-id=64000C", }, }, }, @@ -268,8 +275,9 @@ func TestTrackIsH264(t *testing.T) { Value: "96 H264/90000", }, { - Key: "fmtp", - Value: "96 packetization-mode=1; sprop-parameter-sets=Z2QADKw7ULBLQgAAAwACAAADAD0I,aO48gA==; profile-level-id=64000C", + Key: "fmtp", + Value: "96 packetization-mode=1; " + + "sprop-parameter-sets=Z2QADKw7ULBLQgAAAwACAAADAD0I,aO48gA==; profile-level-id=64000C", }, }, }, @@ -303,8 +311,9 @@ func TestTrackExtractConfigH264(t *testing.T) { Value: "96 H264/90000", }, { - Key: "fmtp", - Value: "96 packetization-mode=1; sprop-parameter-sets=Z2QADKw7ULBLQgAAAwACAAADAD0I,aO48gA==; profile-level-id=64000C", + Key: "fmtp", + Value: "96 packetization-mode=1; " + + "sprop-parameter-sets=Z2QADKw7ULBLQgAAAwACAAADAD0I,aO48gA==; profile-level-id=64000C", }, }, }, @@ -335,8 +344,9 @@ func TestTrackExtractConfigH264(t *testing.T) { Value: "96 H264/90000", }, { - Key: "fmtp", - Value: "96 packetization-mode=1;profile-level-id=64001f;sprop-parameter-sets=Z2QAH6zZQFAFuwFsgAAAAwCAAAAeB4wYyw==,aOvjyyLA;", + Key: "fmtp", + Value: "96 packetization-mode=1;profile-level-id=64001f;" + + "sprop-parameter-sets=Z2QAH6zZQFAFuwFsgAAAAwCAAAAeB4wYyw==,aOvjyyLA;", }, }, },