mirror of
https://github.com/aler9/rtsp-simple-server
synced 2025-11-01 19:42:37 +08:00
enable errcheck (#2201)
Some checks reported warnings
lint / code (push) Has been cancelled
lint / mod-tidy (push) Has been cancelled
lint / apidocs (push) Has been cancelled
test / test64 (push) Has been cancelled
test / test32 (push) Has been cancelled
test / test_highlevel (push) Has been cancelled
Some checks reported warnings
lint / code (push) Has been cancelled
lint / mod-tidy (push) Has been cancelled
lint / apidocs (push) Has been cancelled
test / test64 (push) Has been cancelled
test / test32 (push) Has been cancelled
test / test_highlevel (push) Has been cancelled
This commit is contained in:
@@ -15,13 +15,49 @@ linters:
|
|||||||
- unconvert
|
- unconvert
|
||||||
- wastedassign
|
- wastedassign
|
||||||
- whitespace
|
- whitespace
|
||||||
disable:
|
|
||||||
- errcheck
|
|
||||||
|
|
||||||
issues:
|
issues:
|
||||||
exclude-use-default: false
|
exclude-use-default: false
|
||||||
|
|
||||||
linters-settings:
|
linters-settings:
|
||||||
|
errcheck:
|
||||||
|
exclude-functions:
|
||||||
|
- io.Copy
|
||||||
|
- (io.Closer).Close
|
||||||
|
- (io.Writer).Write
|
||||||
|
- (hash.Hash).Write
|
||||||
|
- (net.Conn).Close
|
||||||
|
- (net.Conn).SetReadDeadline
|
||||||
|
- (net.Conn).SetWriteDeadline
|
||||||
|
- (*net.TCPConn).SetKeepAlive
|
||||||
|
- (*net.TCPConn).SetKeepAlivePeriod
|
||||||
|
- (*net.TCPConn).SetNoDelay
|
||||||
|
- (net.Listener).Close
|
||||||
|
- (net.PacketConn).Close
|
||||||
|
- (net.PacketConn).SetReadDeadline
|
||||||
|
- (net.PacketConn).SetWriteDeadline
|
||||||
|
- (net/http.ResponseWriter).Write
|
||||||
|
- (*net/http.Server).Serve
|
||||||
|
- (*net/http.Server).ServeTLS
|
||||||
|
- (*net/http.Server).Shutdown
|
||||||
|
- os.Chdir
|
||||||
|
- os.Mkdir
|
||||||
|
- os.MkdirAll
|
||||||
|
- os.Remove
|
||||||
|
- os.RemoveAll
|
||||||
|
- os.Setenv
|
||||||
|
- os.Unsetenv
|
||||||
|
- (*os.File).WriteString
|
||||||
|
- (*os.File).Close
|
||||||
|
- (github.com/datarhei/gosrt.Conn).Close
|
||||||
|
- (github.com/datarhei/gosrt.Conn).SetReadDeadline
|
||||||
|
- (github.com/datarhei/gosrt.Conn).SetWriteDeadline
|
||||||
|
- (*github.com/bluenviron/gortsplib/v3.Client).Close
|
||||||
|
- (*github.com/bluenviron/gortsplib/v3.Server).Close
|
||||||
|
- (*github.com/bluenviron/gortsplib/v3.ServerSession).Close
|
||||||
|
- (*github.com/bluenviron/gortsplib/v3.ServerStream).Close
|
||||||
|
- (*github.com/bluenviron/gortsplib/v3.ServerConn).Close
|
||||||
|
|
||||||
govet:
|
govet:
|
||||||
enable-all: true
|
enable-all: true
|
||||||
disable:
|
disable:
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ func loadFromFile(fpath string, conf *Conf) (bool, error) {
|
|||||||
// other configuration files are not
|
// other configuration files are not
|
||||||
if fpath == "mediamtx.yml" || fpath == "rtsp-simple-server.yml" {
|
if fpath == "mediamtx.yml" || fpath == "rtsp-simple-server.yml" {
|
||||||
if _, err := os.Stat(fpath); errors.Is(err, os.ErrNotExist) {
|
if _, err := os.Stat(fpath); errors.Is(err, os.ErrNotExist) {
|
||||||
conf.UnmarshalJSON(nil) // load defaults
|
// load defaults
|
||||||
|
conf.UnmarshalJSON(nil) //nolint:errcheck
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -294,7 +295,8 @@ func (conf *Conf) Check() error {
|
|||||||
pconf := conf.Paths[name]
|
pconf := conf.Paths[name]
|
||||||
if pconf == nil {
|
if pconf == nil {
|
||||||
pconf = &PathConf{}
|
pconf = &PathConf{}
|
||||||
pconf.UnmarshalJSON(nil) // fill defaults
|
// load defaults
|
||||||
|
pconf.UnmarshalJSON(nil) //nolint:errcheck
|
||||||
conf.Paths[name] = pconf
|
conf.Paths[name] = pconf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
3
internal/conf/env/env.go
vendored
3
internal/conf/env/env.go
vendored
@@ -117,7 +117,8 @@ func loadEnvInternal(env map[string]string, prefix string, rv reflect.Value) err
|
|||||||
if nv == zero {
|
if nv == zero {
|
||||||
nv = reflect.New(rt.Elem().Elem())
|
nv = reflect.New(rt.Elem().Elem())
|
||||||
if unm, ok := nv.Interface().(json.Unmarshaler); ok {
|
if unm, ok := nv.Interface().(json.Unmarshaler); ok {
|
||||||
unm.UnmarshalJSON(nil) // load defaults
|
// load defaults
|
||||||
|
unm.UnmarshalJSON(nil) //nolint:errcheck
|
||||||
}
|
}
|
||||||
rv.SetMapIndex(reflect.ValueOf(mapKeyLower), nv)
|
rv.SetMapIndex(reflect.ValueOf(mapKeyLower), nv)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ func New(confPath string) (*ConfWatcher, error) {
|
|||||||
|
|
||||||
err = inner.Add(parentPath)
|
err = inner.Add(parentPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
inner.Close()
|
inner.Close() //nolint:errcheck
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@ outer:
|
|||||||
}
|
}
|
||||||
|
|
||||||
close(w.signal)
|
close(w.signal)
|
||||||
w.inner.Close()
|
w.inner.Close() //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
// Watch returns a channel that is called after the configuration file has changed.
|
// Watch returns a channel that is called after the configuration file has changed.
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ func newAPI(
|
|||||||
}
|
}
|
||||||
|
|
||||||
router := gin.New()
|
router := gin.New()
|
||||||
router.SetTrustedProxies(nil)
|
router.SetTrustedProxies(nil) //nolint:errcheck
|
||||||
|
|
||||||
group := router.Group("/")
|
group := router.Group("/")
|
||||||
|
|
||||||
@@ -387,7 +387,7 @@ func (a *api) onConfigPathsAdd(ctx *gin.Context) {
|
|||||||
newConfPath := &conf.PathConf{}
|
newConfPath := &conf.PathConf{}
|
||||||
|
|
||||||
// load default values
|
// load default values
|
||||||
newConfPath.UnmarshalJSON([]byte("{}"))
|
newConfPath.UnmarshalJSON([]byte("{}")) //nolint:errcheck
|
||||||
|
|
||||||
fillStruct(newConfPath, in)
|
fillStruct(newConfPath, in)
|
||||||
|
|
||||||
|
|||||||
@@ -265,13 +265,14 @@ func TestAPIPathsList(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer source.Close()
|
defer source.Close()
|
||||||
|
|
||||||
source.WritePacketRTP(media0, &rtp.Packet{
|
err = source.WritePacketRTP(media0, &rtp.Packet{
|
||||||
Header: rtp.Header{
|
Header: rtp.Header{
|
||||||
Version: 2,
|
Version: 2,
|
||||||
PayloadType: 96,
|
PayloadType: 96,
|
||||||
},
|
},
|
||||||
Payload: []byte{0x01, 0x02, 0x03, 0x04},
|
Payload: []byte{0x01, 0x02, 0x03, 0x04},
|
||||||
})
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
var out pathList
|
var out pathList
|
||||||
httpRequest(t, hc, http.MethodGet, "http://localhost:9997/v2/paths/list", nil, &out)
|
httpRequest(t, hc, http.MethodGet, "http://localhost:9997/v2/paths/list", nil, &out)
|
||||||
@@ -618,7 +619,7 @@ func TestAPIProtocolList(t *testing.T) {
|
|||||||
0x00, 0x00, 0x03, 0x00, 0xf0, 0x3c, 0x60, 0xc9, 0x20,
|
0x00, 0x00, 0x03, 0x00, 0xf0, 0x3c, 0x60, 0xc9, 0x20,
|
||||||
},*/
|
},*/
|
||||||
|
|
||||||
source.WritePacketRTP(medi, &rtp.Packet{
|
err = source.WritePacketRTP(medi, &rtp.Packet{
|
||||||
Header: rtp.Header{
|
Header: rtp.Header{
|
||||||
Version: 2,
|
Version: 2,
|
||||||
Marker: true,
|
Marker: true,
|
||||||
@@ -632,6 +633,7 @@ func TestAPIProtocolList(t *testing.T) {
|
|||||||
0x05,
|
0x05,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@@ -654,7 +656,7 @@ func TestAPIProtocolList(t *testing.T) {
|
|||||||
|
|
||||||
time.Sleep(500 * time.Millisecond)
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
|
||||||
source.WritePacketRTP(medi, &rtp.Packet{
|
err = source.WritePacketRTP(medi, &rtp.Packet{
|
||||||
Header: rtp.Header{
|
Header: rtp.Header{
|
||||||
Version: 2,
|
Version: 2,
|
||||||
Marker: true,
|
Marker: true,
|
||||||
@@ -665,6 +667,7 @@ func TestAPIProtocolList(t *testing.T) {
|
|||||||
},
|
},
|
||||||
Payload: []byte{0x01, 0x02, 0x03, 0x04},
|
Payload: []byte{0x01, 0x02, 0x03, 0x04},
|
||||||
})
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
<-c.incomingTrack
|
<-c.incomingTrack
|
||||||
|
|
||||||
@@ -686,7 +689,9 @@ func TestAPIProtocolList(t *testing.T) {
|
|||||||
|
|
||||||
err = w.WriteH26x(track, 0, 0, true, [][]byte{{1}})
|
err = w.WriteH26x(track, 0, 0, true, [][]byte{{1}})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
bw.Flush()
|
|
||||||
|
err = bw.Flush()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
time.Sleep(500 * time.Millisecond)
|
time.Sleep(500 * time.Millisecond)
|
||||||
}
|
}
|
||||||
@@ -898,7 +903,7 @@ func TestAPIProtocolGet(t *testing.T) {
|
|||||||
0x00, 0x00, 0x03, 0x00, 0xf0, 0x3c, 0x60, 0xc9, 0x20,
|
0x00, 0x00, 0x03, 0x00, 0xf0, 0x3c, 0x60, 0xc9, 0x20,
|
||||||
},*/
|
},*/
|
||||||
|
|
||||||
source.WritePacketRTP(medi, &rtp.Packet{
|
err := source.WritePacketRTP(medi, &rtp.Packet{
|
||||||
Header: rtp.Header{
|
Header: rtp.Header{
|
||||||
Version: 2,
|
Version: 2,
|
||||||
Marker: true,
|
Marker: true,
|
||||||
@@ -912,6 +917,7 @@ func TestAPIProtocolGet(t *testing.T) {
|
|||||||
0x05,
|
0x05,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@@ -934,7 +940,7 @@ func TestAPIProtocolGet(t *testing.T) {
|
|||||||
|
|
||||||
time.Sleep(500 * time.Millisecond)
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
|
||||||
source.WritePacketRTP(medi, &rtp.Packet{
|
err = source.WritePacketRTP(medi, &rtp.Packet{
|
||||||
Header: rtp.Header{
|
Header: rtp.Header{
|
||||||
Version: 2,
|
Version: 2,
|
||||||
Marker: true,
|
Marker: true,
|
||||||
@@ -945,6 +951,7 @@ func TestAPIProtocolGet(t *testing.T) {
|
|||||||
},
|
},
|
||||||
Payload: []byte{0x01, 0x02, 0x03, 0x04},
|
Payload: []byte{0x01, 0x02, 0x03, 0x04},
|
||||||
})
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
<-c.incomingTrack
|
<-c.incomingTrack
|
||||||
|
|
||||||
@@ -966,7 +973,9 @@ func TestAPIProtocolGet(t *testing.T) {
|
|||||||
|
|
||||||
err = w.WriteH26x(track, 0, 0, true, [][]byte{{1}})
|
err = w.WriteH26x(track, 0, 0, true, [][]byte{{1}})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
bw.Flush()
|
|
||||||
|
err = bw.Flush()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
time.Sleep(500 * time.Millisecond)
|
time.Sleep(500 * time.Millisecond)
|
||||||
}
|
}
|
||||||
@@ -1237,9 +1246,9 @@ func TestAPIProtocolKick(t *testing.T) {
|
|||||||
|
|
||||||
err = w.WriteH26x(track, 0, 0, true, [][]byte{{1}})
|
err = w.WriteH26x(track, 0, 0, true, [][]byte{{1}})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
bw.Flush()
|
|
||||||
|
|
||||||
// time.Sleep(500 * time.Millisecond)
|
err = bw.Flush()
|
||||||
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var pa string
|
var pa string
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ func (p *Core) createResources(initial bool) error {
|
|||||||
// on Linux, try to raise the number of file descriptors that can be opened
|
// on Linux, try to raise the number of file descriptors that can be opened
|
||||||
// to allow the maximum possible number of clients
|
// to allow the maximum possible number of clients
|
||||||
// do not check for errors
|
// do not check for errors
|
||||||
rlimit.Raise()
|
rlimit.Raise() //nolint:errcheck
|
||||||
|
|
||||||
gin.SetMode(gin.ReleaseMode)
|
gin.SetMode(gin.ReleaseMode)
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ func newHLSHTTPServer( //nolint:dupl
|
|||||||
}
|
}
|
||||||
|
|
||||||
router := gin.New()
|
router := gin.New()
|
||||||
router.SetTrustedProxies(trustedProxies.ToTrustedProxies())
|
router.SetTrustedProxies(trustedProxies.ToTrustedProxies()) //nolint:errcheck
|
||||||
|
|
||||||
router.NoRoute(s.onRequest)
|
router.NoRoute(s.onRequest)
|
||||||
|
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ func TestHLSRead(t *testing.T) {
|
|||||||
time.Sleep(500 * time.Millisecond)
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
|
||||||
for i := 0; i < 2; i++ {
|
for i := 0; i < 2; i++ {
|
||||||
source.WritePacketRTP(medi, &rtp.Packet{
|
err = source.WritePacketRTP(medi, &rtp.Packet{
|
||||||
Header: rtp.Header{
|
Header: rtp.Header{
|
||||||
Version: 2,
|
Version: 2,
|
||||||
Marker: true,
|
Marker: true,
|
||||||
@@ -156,6 +156,7 @@ func TestHLSRead(t *testing.T) {
|
|||||||
0x05, 0x02, 0x03, 0x04, // IDR
|
0x05, 0x02, 0x03, 0x04, // IDR
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
hc := &http.Client{Transport: &http.Transport{}}
|
hc := &http.Client{Transport: &http.Transport{}}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ func (ts *testHLSManager) onSegment1(ctx *gin.Context) {
|
|||||||
|
|
||||||
w := mpegts.NewWriter(ctx.Writer, []*mpegts.Track{track1, track2})
|
w := mpegts.NewWriter(ctx.Writer, []*mpegts.Track{track1, track2})
|
||||||
|
|
||||||
w.WriteMPEG4Audio(track2, 1*90000, [][]byte{{1, 2, 3, 4}})
|
w.WriteMPEG4Audio(track2, 1*90000, [][]byte{{1, 2, 3, 4}}) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ts *testHLSManager) onSegment2(ctx *gin.Context) {
|
func (ts *testHLSManager) onSegment2(ctx *gin.Context) {
|
||||||
@@ -97,14 +97,14 @@ func (ts *testHLSManager) onSegment2(ctx *gin.Context) {
|
|||||||
|
|
||||||
w := mpegts.NewWriter(ctx.Writer, []*mpegts.Track{track1, track2})
|
w := mpegts.NewWriter(ctx.Writer, []*mpegts.Track{track1, track2})
|
||||||
|
|
||||||
w.WriteH26x(track1, 2*90000, 2*90000, true, [][]byte{
|
w.WriteH26x(track1, 2*90000, 2*90000, true, [][]byte{ //nolint:errcheck
|
||||||
{7, 1, 2, 3}, // SPS
|
{7, 1, 2, 3}, // SPS
|
||||||
{8}, // PPS
|
{8}, // PPS
|
||||||
})
|
})
|
||||||
|
|
||||||
w.WriteMPEG4Audio(track2, 2*90000, [][]byte{{1, 2, 3, 4}})
|
w.WriteMPEG4Audio(track2, 2*90000, [][]byte{{1, 2, 3, 4}}) //nolint:errcheck
|
||||||
|
|
||||||
w.WriteH26x(track1, 2*90000, 2*90000, true, [][]byte{
|
w.WriteH26x(track1, 2*90000, 2*90000, true, [][]byte{ //nolint:errcheck
|
||||||
{5}, // IDR
|
{5}, // IDR
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ func newMetrics(
|
|||||||
}
|
}
|
||||||
|
|
||||||
router := gin.New()
|
router := gin.New()
|
||||||
router.SetTrustedProxies(nil)
|
router.SetTrustedProxies(nil) //nolint:errcheck
|
||||||
|
|
||||||
router.GET("/metrics", m.onMetrics)
|
router.GET("/metrics", m.onMetrics)
|
||||||
|
|
||||||
@@ -215,7 +215,7 @@ func (m *metrics) onMetrics(ctx *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx.Writer.WriteHeader(http.StatusOK)
|
ctx.Writer.WriteHeader(http.StatusOK)
|
||||||
io.WriteString(ctx.Writer, out)
|
io.WriteString(ctx.Writer, out) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
// pathManagerSet is called by pathManager.
|
// pathManagerSet is called by pathManager.
|
||||||
|
|||||||
@@ -164,23 +164,7 @@ func (c *rtmpConn) run() {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
err := func() error {
|
err := c.runInner()
|
||||||
readerErr := make(chan error)
|
|
||||||
go func() {
|
|
||||||
readerErr <- c.runReader()
|
|
||||||
}()
|
|
||||||
|
|
||||||
select {
|
|
||||||
case err := <-readerErr:
|
|
||||||
c.nconn.Close()
|
|
||||||
return err
|
|
||||||
|
|
||||||
case <-c.ctx.Done():
|
|
||||||
c.nconn.Close()
|
|
||||||
<-readerErr
|
|
||||||
return errors.New("terminated")
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
c.ctxCancel()
|
c.ctxCancel()
|
||||||
|
|
||||||
@@ -189,6 +173,24 @@ func (c *rtmpConn) run() {
|
|||||||
c.Log(logger.Info, "closed (%v)", err)
|
c.Log(logger.Info, "closed (%v)", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *rtmpConn) runInner() error {
|
||||||
|
readerErr := make(chan error)
|
||||||
|
go func() {
|
||||||
|
readerErr <- c.runReader()
|
||||||
|
}()
|
||||||
|
|
||||||
|
select {
|
||||||
|
case err := <-readerErr:
|
||||||
|
c.nconn.Close()
|
||||||
|
return err
|
||||||
|
|
||||||
|
case <-c.ctx.Done():
|
||||||
|
c.nconn.Close()
|
||||||
|
<-readerErr
|
||||||
|
return errors.New("terminated")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *rtmpConn) runReader() error {
|
func (c *rtmpConn) runReader() error {
|
||||||
c.nconn.SetReadDeadline(time.Now().Add(time.Duration(c.readTimeout)))
|
c.nconn.SetReadDeadline(time.Now().Add(time.Duration(c.readTimeout)))
|
||||||
c.nconn.SetWriteDeadline(time.Now().Add(time.Duration(c.writeTimeout)))
|
c.nconn.SetWriteDeadline(time.Now().Add(time.Duration(c.writeTimeout)))
|
||||||
|
|||||||
@@ -31,16 +31,18 @@ func newRTMPListener(
|
|||||||
func (l *rtmpListener) run() {
|
func (l *rtmpListener) run() {
|
||||||
defer l.wg.Done()
|
defer l.wg.Done()
|
||||||
|
|
||||||
err := func() error {
|
err := l.runInner()
|
||||||
for {
|
|
||||||
conn, err := l.ln.Accept()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
l.parent.newConn(conn)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
l.parent.acceptError(err)
|
l.parent.acceptError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (l *rtmpListener) runInner() error {
|
||||||
|
for {
|
||||||
|
conn, err := l.ln.Accept()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
l.parent.newConn(conn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ func TestRTSPSource(t *testing.T) {
|
|||||||
|
|
||||||
err = s.Start()
|
err = s.Start()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer s.Wait()
|
defer s.Wait() //nolint:errcheck
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
|
||||||
if source == "udp" || source == "tcp" {
|
if source == "udp" || source == "tcp" {
|
||||||
@@ -212,7 +212,7 @@ func TestRTSPSourceNoPassword(t *testing.T) {
|
|||||||
}
|
}
|
||||||
err = s.Start()
|
err = s.Start()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer s.Wait()
|
defer s.Wait() //nolint:errcheck
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
|
||||||
p, ok := newInstance("rtmp: no\n" +
|
p, ok := newInstance("rtmp: no\n" +
|
||||||
@@ -268,7 +268,7 @@ func TestRTSPSourceRange(t *testing.T) {
|
|||||||
}
|
}
|
||||||
err := s.Start()
|
err := s.Start()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer s.Wait()
|
defer s.Wait() //nolint:errcheck
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
|
||||||
var addConf string
|
var addConf string
|
||||||
|
|||||||
@@ -32,29 +32,31 @@ func newSRTListener(
|
|||||||
func (l *srtListener) run() {
|
func (l *srtListener) run() {
|
||||||
defer l.wg.Done()
|
defer l.wg.Done()
|
||||||
|
|
||||||
err := func() error {
|
err := l.runInner()
|
||||||
for {
|
|
||||||
var sconn *srtConn
|
|
||||||
conn, _, err := l.ln.Accept(func(req srt.ConnRequest) srt.ConnType {
|
|
||||||
sconn = l.parent.newConnRequest(req)
|
|
||||||
if sconn == nil {
|
|
||||||
return srt.REJECT
|
|
||||||
}
|
|
||||||
|
|
||||||
// currently it's the same to return SUBSCRIBE or PUBLISH
|
|
||||||
return srt.SUBSCRIBE
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if conn == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
sconn.setConn(conn)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
l.parent.acceptError(err)
|
l.parent.acceptError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (l *srtListener) runInner() error {
|
||||||
|
for {
|
||||||
|
var sconn *srtConn
|
||||||
|
conn, _, err := l.ln.Accept(func(req srt.ConnRequest) srt.ConnType {
|
||||||
|
sconn = l.parent.newConnRequest(req)
|
||||||
|
if sconn == nil {
|
||||||
|
return srt.REJECT
|
||||||
|
}
|
||||||
|
|
||||||
|
// currently it's the same to return SUBSCRIBE or PUBLISH
|
||||||
|
return srt.SUBSCRIBE
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if conn == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
sconn.setConn(conn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -50,7 +50,9 @@ func TestSRTServer(t *testing.T) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
bw.Flush()
|
|
||||||
|
err = bw.Flush()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
time.Sleep(500 * time.Millisecond)
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
|
||||||
@@ -71,7 +73,9 @@ func TestSRTServer(t *testing.T) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
bw.Flush()
|
|
||||||
|
err = bw.Flush()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
r, err := mpegts.NewReader(reader)
|
r, err := mpegts.NewReader(reader)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|||||||
@@ -51,13 +51,17 @@ func TestSRTSource(t *testing.T) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
bw.Flush()
|
|
||||||
|
err = bw.Flush()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
<-connected
|
<-connected
|
||||||
|
|
||||||
err = w.WriteH26x(track, 0, 0, true, [][]byte{{5, 2}})
|
err = w.WriteH26x(track, 0, 0, true, [][]byte{{5, 2}})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
bw.Flush()
|
|
||||||
|
err = bw.Flush()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
<-done
|
<-done
|
||||||
}()
|
}()
|
||||||
|
|||||||
@@ -55,13 +55,17 @@ func TestUDPSource(t *testing.T) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
bw.Flush()
|
|
||||||
|
err = bw.Flush()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
<-connected
|
<-connected
|
||||||
|
|
||||||
err = w.WriteH26x(track, 0, 0, true, [][]byte{{5, 2}})
|
err = w.WriteH26x(track, 0, 0, true, [][]byte{{5, 2}})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
bw.Flush()
|
|
||||||
|
err = bw.Flush()
|
||||||
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
medias, baseURL, _, err := c.Describe(u)
|
medias, baseURL, _, err := c.Describe(u)
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ func newWebRTCHTTPServer( //nolint:dupl
|
|||||||
}
|
}
|
||||||
|
|
||||||
router := gin.New()
|
router := gin.New()
|
||||||
router.SetTrustedProxies(trustedProxies.ToTrustedProxies())
|
router.SetTrustedProxies(trustedProxies.ToTrustedProxies()) //nolint:errcheck
|
||||||
router.NoRoute(s.onRequest)
|
router.NoRoute(s.onRequest)
|
||||||
|
|
||||||
network, address := restrictNetwork("tcp", address)
|
network, address := restrictNetwork("tcp", address)
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ func TestWebRTCRead(t *testing.T) {
|
|||||||
|
|
||||||
time.Sleep(500 * time.Millisecond)
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
|
||||||
source.WritePacketRTP(medi, &rtp.Packet{
|
err = source.WritePacketRTP(medi, &rtp.Packet{
|
||||||
Header: rtp.Header{
|
Header: rtp.Header{
|
||||||
Version: 2,
|
Version: 2,
|
||||||
Marker: true,
|
Marker: true,
|
||||||
@@ -253,6 +253,7 @@ func TestWebRTCRead(t *testing.T) {
|
|||||||
},
|
},
|
||||||
Payload: []byte{3},
|
Payload: []byte{3},
|
||||||
})
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
trak := <-c.incomingTrack
|
trak := <-c.incomingTrack
|
||||||
|
|
||||||
@@ -289,7 +290,7 @@ func TestWebRTCReadNotFound(t *testing.T) {
|
|||||||
ICEServers: iceServers,
|
ICEServers: iceServers,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer pc.Close()
|
defer pc.Close() //nolint:errcheck
|
||||||
|
|
||||||
_, err = pc.AddTransceiverFromKind(webrtc.RTPCodecTypeVideo)
|
_, err = pc.AddTransceiverFromKind(webrtc.RTPCodecTypeVideo)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|||||||
@@ -47,7 +47,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
PayloadType: 105,
|
PayloadType: 105,
|
||||||
PayloadMaxSize: webrtcPayloadMaxSize,
|
PayloadMaxSize: webrtcPayloadMaxSize,
|
||||||
}
|
}
|
||||||
encoder.Init()
|
err = encoder.Init()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &webRTCOutgoingTrack{
|
return &webRTCOutgoingTrack{
|
||||||
media: videoMedia,
|
media: videoMedia,
|
||||||
@@ -66,7 +69,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, pkt := range packets {
|
for _, pkt := range packets {
|
||||||
webRTCTrak.WriteRTP(pkt)
|
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -94,7 +97,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
PayloadType: 96,
|
PayloadType: 96,
|
||||||
PayloadMaxSize: webrtcPayloadMaxSize,
|
PayloadMaxSize: webrtcPayloadMaxSize,
|
||||||
}
|
}
|
||||||
encoder.Init()
|
err = encoder.Init()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &webRTCOutgoingTrack{
|
return &webRTCOutgoingTrack{
|
||||||
media: videoMedia,
|
media: videoMedia,
|
||||||
@@ -113,7 +119,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, pkt := range packets {
|
for _, pkt := range packets {
|
||||||
webRTCTrak.WriteRTP(pkt)
|
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -141,7 +147,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
PayloadType: 96,
|
PayloadType: 96,
|
||||||
PayloadMaxSize: webrtcPayloadMaxSize,
|
PayloadMaxSize: webrtcPayloadMaxSize,
|
||||||
}
|
}
|
||||||
encoder.Init()
|
err = encoder.Init()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &webRTCOutgoingTrack{
|
return &webRTCOutgoingTrack{
|
||||||
media: videoMedia,
|
media: videoMedia,
|
||||||
@@ -160,7 +169,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, pkt := range packets {
|
for _, pkt := range packets {
|
||||||
webRTCTrak.WriteRTP(pkt)
|
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -188,7 +197,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
PayloadType: 96,
|
PayloadType: 96,
|
||||||
PayloadMaxSize: webrtcPayloadMaxSize,
|
PayloadMaxSize: webrtcPayloadMaxSize,
|
||||||
}
|
}
|
||||||
encoder.Init()
|
err = encoder.Init()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
var lastPTS time.Duration
|
var lastPTS time.Duration
|
||||||
firstNALUReceived := false
|
firstNALUReceived := false
|
||||||
@@ -220,7 +232,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, pkt := range packets {
|
for _, pkt := range packets {
|
||||||
webRTCTrak.WriteRTP(pkt)
|
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -255,7 +267,7 @@ func newWebRTCOutgoingTrackAudio(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
track: webRTCTrak,
|
track: webRTCTrak,
|
||||||
cb: func(unit formatprocessor.Unit) error {
|
cb: func(unit formatprocessor.Unit) error {
|
||||||
for _, pkt := range unit.GetRTPPackets() {
|
for _, pkt := range unit.GetRTPPackets() {
|
||||||
webRTCTrak.WriteRTP(pkt)
|
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -285,7 +297,7 @@ func newWebRTCOutgoingTrackAudio(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
track: webRTCTrak,
|
track: webRTCTrak,
|
||||||
cb: func(unit formatprocessor.Unit) error {
|
cb: func(unit formatprocessor.Unit) error {
|
||||||
for _, pkt := range unit.GetRTPPackets() {
|
for _, pkt := range unit.GetRTPPackets() {
|
||||||
webRTCTrak.WriteRTP(pkt)
|
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -322,7 +334,7 @@ func newWebRTCOutgoingTrackAudio(medias media.Medias) (*webRTCOutgoingTrack, err
|
|||||||
track: webRTCTrak,
|
track: webRTCTrak,
|
||||||
cb: func(unit formatprocessor.Unit) error {
|
cb: func(unit formatprocessor.Unit) error {
|
||||||
for _, pkt := range unit.GetRTPPackets() {
|
for _, pkt := range unit.GetRTPPackets() {
|
||||||
webRTCTrak.WriteRTP(pkt)
|
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ func (e *Cmd) runOSSpecific() error {
|
|||||||
|
|
||||||
select {
|
select {
|
||||||
case <-e.terminate:
|
case <-e.terminate:
|
||||||
syscall.Kill(cmd.Process.Pid, syscall.SIGINT)
|
syscall.Kill(cmd.Process.Pid, syscall.SIGINT) //nolint:errcheck
|
||||||
<-cmdDone
|
<-cmdDone
|
||||||
return errTerminated
|
return errTerminated
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ func TestGenericRemovePadding(t *testing.T) {
|
|||||||
PayloadTyp: 96,
|
PayloadTyp: 96,
|
||||||
RTPMa: "private/90000",
|
RTPMa: "private/90000",
|
||||||
}
|
}
|
||||||
forma.Init()
|
err := forma.Init()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
p, err := New(1472, forma, false, nil)
|
p, err := New(1472, forma, false, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ func TestH264DynamicParams(t *testing.T) {
|
|||||||
RTPPackets: []*rtp.Packet{pkts[0]},
|
RTPPackets: []*rtp.Packet{pkts[0]},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
p.Process(data, true)
|
err = p.Process(data, true)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, [][]byte{
|
require.Equal(t, [][]byte{
|
||||||
{byte(h264.NALUTypeIDR)},
|
{byte(h264.NALUTypeIDR)},
|
||||||
@@ -38,31 +39,37 @@ func TestH264DynamicParams(t *testing.T) {
|
|||||||
|
|
||||||
pkts, err = enc.Encode([][]byte{{7, 4, 5, 6}}, 0) // SPS
|
pkts, err = enc.Encode([][]byte{{7, 4, 5, 6}}, 0) // SPS
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
p.Process(&UnitH264{
|
|
||||||
|
err = p.Process(&UnitH264{
|
||||||
BaseUnit: BaseUnit{
|
BaseUnit: BaseUnit{
|
||||||
RTPPackets: []*rtp.Packet{pkts[0]},
|
RTPPackets: []*rtp.Packet{pkts[0]},
|
||||||
},
|
},
|
||||||
}, false)
|
}, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
pkts, err = enc.Encode([][]byte{{8, 1}}, 0) // PPS
|
pkts, err = enc.Encode([][]byte{{8, 1}}, 0) // PPS
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
p.Process(&UnitH264{
|
|
||||||
|
err = p.Process(&UnitH264{
|
||||||
BaseUnit: BaseUnit{
|
BaseUnit: BaseUnit{
|
||||||
RTPPackets: []*rtp.Packet{pkts[0]},
|
RTPPackets: []*rtp.Packet{pkts[0]},
|
||||||
},
|
},
|
||||||
}, false)
|
}, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, []byte{7, 4, 5, 6}, forma.SPS)
|
require.Equal(t, []byte{7, 4, 5, 6}, forma.SPS)
|
||||||
require.Equal(t, []byte{8, 1}, forma.PPS)
|
require.Equal(t, []byte{8, 1}, forma.PPS)
|
||||||
|
|
||||||
pkts, err = enc.Encode([][]byte{{byte(h264.NALUTypeIDR)}}, 0)
|
pkts, err = enc.Encode([][]byte{{byte(h264.NALUTypeIDR)}}, 0)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
data = &UnitH264{
|
data = &UnitH264{
|
||||||
BaseUnit: BaseUnit{
|
BaseUnit: BaseUnit{
|
||||||
RTPPackets: []*rtp.Packet{pkts[0]},
|
RTPPackets: []*rtp.Packet{pkts[0]},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
p.Process(data, true)
|
err = p.Process(data, true)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, [][]byte{
|
require.Equal(t, [][]byte{
|
||||||
{0x07, 4, 5, 6},
|
{0x07, 4, 5, 6},
|
||||||
@@ -127,7 +134,9 @@ func TestH264OversizedPackets(t *testing.T) {
|
|||||||
RTPPackets: []*rtp.Packet{pkt},
|
RTPPackets: []*rtp.Packet{pkt},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
p.Process(data, false)
|
err := p.Process(data, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
out = append(out, data.RTPPackets...)
|
out = append(out, data.RTPPackets...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +199,8 @@ func TestH264EmptyPacket(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
p.Process(unit, false)
|
err = p.Process(unit, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
// if all NALUs have been removed, no RTP packets must be generated.
|
// if all NALUs have been removed, no RTP packets must be generated.
|
||||||
require.Equal(t, []*rtp.Packet(nil), unit.RTPPackets)
|
require.Equal(t, []*rtp.Packet(nil), unit.RTPPackets)
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ func TestH265DynamicParams(t *testing.T) {
|
|||||||
RTPPackets: []*rtp.Packet{pkts[0]},
|
RTPPackets: []*rtp.Packet{pkts[0]},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
p.Process(data, true)
|
err = p.Process(data, true)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, [][]byte{
|
require.Equal(t, [][]byte{
|
||||||
{byte(h265.NALUType_CRA_NUT) << 1, 0},
|
{byte(h265.NALUType_CRA_NUT) << 1, 0},
|
||||||
@@ -37,27 +38,33 @@ func TestH265DynamicParams(t *testing.T) {
|
|||||||
|
|
||||||
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_VPS_NUT) << 1, 1, 2, 3}}, 0)
|
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_VPS_NUT) << 1, 1, 2, 3}}, 0)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
p.Process(&UnitH265{
|
|
||||||
|
err = p.Process(&UnitH265{
|
||||||
BaseUnit: BaseUnit{
|
BaseUnit: BaseUnit{
|
||||||
RTPPackets: []*rtp.Packet{pkts[0]},
|
RTPPackets: []*rtp.Packet{pkts[0]},
|
||||||
},
|
},
|
||||||
}, false)
|
}, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_SPS_NUT) << 1, 4, 5, 6}}, 0)
|
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_SPS_NUT) << 1, 4, 5, 6}}, 0)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
p.Process(&UnitH265{
|
|
||||||
|
err = p.Process(&UnitH265{
|
||||||
BaseUnit: BaseUnit{
|
BaseUnit: BaseUnit{
|
||||||
RTPPackets: []*rtp.Packet{pkts[0]},
|
RTPPackets: []*rtp.Packet{pkts[0]},
|
||||||
},
|
},
|
||||||
}, false)
|
}, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_PPS_NUT) << 1, 7, 8, 9}}, 0)
|
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_PPS_NUT) << 1, 7, 8, 9}}, 0)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
p.Process(&UnitH265{
|
|
||||||
|
err = p.Process(&UnitH265{
|
||||||
BaseUnit: BaseUnit{
|
BaseUnit: BaseUnit{
|
||||||
RTPPackets: []*rtp.Packet{pkts[0]},
|
RTPPackets: []*rtp.Packet{pkts[0]},
|
||||||
},
|
},
|
||||||
}, false)
|
}, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, []byte{byte(h265.NALUType_VPS_NUT) << 1, 1, 2, 3}, forma.VPS)
|
require.Equal(t, []byte{byte(h265.NALUType_VPS_NUT) << 1, 1, 2, 3}, forma.VPS)
|
||||||
require.Equal(t, []byte{byte(h265.NALUType_SPS_NUT) << 1, 4, 5, 6}, forma.SPS)
|
require.Equal(t, []byte{byte(h265.NALUType_SPS_NUT) << 1, 4, 5, 6}, forma.SPS)
|
||||||
@@ -65,12 +72,14 @@ func TestH265DynamicParams(t *testing.T) {
|
|||||||
|
|
||||||
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_CRA_NUT) << 1, 0}}, 0)
|
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_CRA_NUT) << 1, 0}}, 0)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
data = &UnitH265{
|
data = &UnitH265{
|
||||||
BaseUnit: BaseUnit{
|
BaseUnit: BaseUnit{
|
||||||
RTPPackets: []*rtp.Packet{pkts[0]},
|
RTPPackets: []*rtp.Packet{pkts[0]},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
p.Process(data, true)
|
err = p.Process(data, true)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, [][]byte{
|
require.Equal(t, [][]byte{
|
||||||
{byte(h265.NALUType_VPS_NUT) << 1, 1, 2, 3},
|
{byte(h265.NALUType_VPS_NUT) << 1, 1, 2, 3},
|
||||||
@@ -124,7 +133,9 @@ func TestH265OversizedPackets(t *testing.T) {
|
|||||||
RTPPackets: []*rtp.Packet{pkt},
|
RTPPackets: []*rtp.Packet{pkt},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
p.Process(data, false)
|
err = p.Process(data, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
out = append(out, data.RTPPackets...)
|
out = append(out, data.RTPPackets...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,7 +198,8 @@ func TestH265EmptyPacket(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
p.Process(unit, false)
|
err = p.Process(unit, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
// if all NALUs have been removed, no RTP packets must be generated.
|
// if all NALUs have been removed, no RTP packets must be generated.
|
||||||
require.Equal(t, []*rtp.Packet(nil), unit.RTPPackets)
|
require.Equal(t, []*rtp.Packet(nil), unit.RTPPackets)
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ func (w *loggerWriter) WriteHeader(statusCode int) {
|
|||||||
func (w *loggerWriter) dump() string {
|
func (w *loggerWriter) dump() string {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
fmt.Fprintf(&buf, "%s %d %s\n", "HTTP/1.1", w.status, http.StatusText(w.status))
|
fmt.Fprintf(&buf, "%s %d %s\n", "HTTP/1.1", w.status, http.StatusText(w.status))
|
||||||
w.w.Header().Write(&buf)
|
w.w.Header().Write(&buf) //nolint:errcheck
|
||||||
buf.Write([]byte("\n"))
|
buf.Write([]byte("\n"))
|
||||||
if w.buf.Len() > 0 {
|
if w.buf.Len() > 0 {
|
||||||
fmt.Fprintf(&buf, "(body of %d bytes)", w.buf.Len())
|
fmt.Fprintf(&buf, "(body of %d bytes)", w.buf.Len())
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ func (d *destinationFile) log(t time.Time, level Level, format string, args ...i
|
|||||||
writeTime(&d.buf, t, false)
|
writeTime(&d.buf, t, false)
|
||||||
writeLevel(&d.buf, level, false)
|
writeLevel(&d.buf, level, false)
|
||||||
writeContent(&d.buf, format, args)
|
writeContent(&d.buf, format, args)
|
||||||
d.file.Write(d.buf.Bytes())
|
d.file.Write(d.buf.Bytes()) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *destinationFile) close() {
|
func (d *destinationFile) close() {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func (d *destinationStdout) log(t time.Time, level Level, format string, args ..
|
|||||||
writeTime(&d.buf, t, d.useColor)
|
writeTime(&d.buf, t, d.useColor)
|
||||||
writeLevel(&d.buf, level, d.useColor)
|
writeLevel(&d.buf, level, d.useColor)
|
||||||
writeContent(&d.buf, format, args)
|
writeContent(&d.buf, format, args)
|
||||||
os.Stdout.Write(d.buf.Bytes())
|
os.Stdout.Write(d.buf.Bytes()) //nolint:errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *destinationStdout) close() {
|
func (d *destinationStdout) close() {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ func TestWriter(t *testing.T) {
|
|||||||
w := NewWriter(&buf)
|
w := NewWriter(&buf)
|
||||||
w.SetCount(100)
|
w.SetCount(100)
|
||||||
|
|
||||||
w.Write(bytes.Repeat([]byte{0x01}, 64))
|
_, err := w.Write(bytes.Repeat([]byte{0x01}, 64))
|
||||||
|
require.NoError(t, err)
|
||||||
require.Equal(t, uint64(100+64), w.Count())
|
require.Equal(t, uint64(100+64), w.Count())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -490,6 +490,6 @@ func BenchmarkRead(b *testing.B) {
|
|||||||
conn := newNoHandshakeConn(&buf)
|
conn := newNoHandshakeConn(&buf)
|
||||||
|
|
||||||
for n := 0; n < b.N; n++ {
|
for n := 0; n < b.N; n++ {
|
||||||
conn.Read()
|
conn.Read() //nolint:errcheck
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,9 +44,12 @@ func (rw *ReadWriter) Read() (Message, error) {
|
|||||||
rw.w.SetAcknowledgeValue(tmsg.Value)
|
rw.w.SetAcknowledgeValue(tmsg.Value)
|
||||||
|
|
||||||
case *UserControlPingRequest:
|
case *UserControlPingRequest:
|
||||||
rw.w.Write(&UserControlPingResponse{
|
err := rw.w.Write(&UserControlPingResponse{
|
||||||
ServerTime: tmsg.ServerTime,
|
ServerTime: tmsg.ServerTime,
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return msg, nil
|
return msg, nil
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ func (r *Reader) Read() (*Message, error) {
|
|||||||
r.chunkStreams[chunkStreamID] = rc
|
r.chunkStreams[chunkStreamID] = rc
|
||||||
}
|
}
|
||||||
|
|
||||||
r.br.UnreadByte()
|
r.br.UnreadByte() //nolint:errcheck
|
||||||
|
|
||||||
msg, err := rc.readMessage(typ)
|
msg, err := rc.readMessage(typ)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ func New(
|
|||||||
|
|
||||||
// Close closes the connection.
|
// Close closes the connection.
|
||||||
func (co *PeerConnection) Close() {
|
func (co *PeerConnection) Close() {
|
||||||
co.PeerConnection.Close()
|
co.PeerConnection.Close() //nolint:errcheck
|
||||||
<-co.closed
|
<-co.closed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ func NewServerConn(w http.ResponseWriter, req *http.Request) (*ServerConn, error
|
|||||||
|
|
||||||
// Close closes a ServerConn.
|
// Close closes a ServerConn.
|
||||||
func (c *ServerConn) Close() {
|
func (c *ServerConn) Close() {
|
||||||
c.wc.Close()
|
c.wc.Close() //nolint:errcheck
|
||||||
close(c.terminate)
|
close(c.terminate)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,10 +67,10 @@ func (c *ServerConn) RemoteAddr() net.Addr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *ServerConn) run() {
|
func (c *ServerConn) run() {
|
||||||
c.wc.SetReadDeadline(time.Now().Add(pingInterval + pingTimeout))
|
c.wc.SetReadDeadline(time.Now().Add(pingInterval + pingTimeout)) //nolint:errcheck
|
||||||
|
|
||||||
c.wc.SetPongHandler(func(string) error {
|
c.wc.SetPongHandler(func(string) error {
|
||||||
c.wc.SetReadDeadline(time.Now().Add(pingInterval + pingTimeout))
|
c.wc.SetReadDeadline(time.Now().Add(pingInterval + pingTimeout)) //nolint:errcheck
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -80,13 +80,13 @@ func (c *ServerConn) run() {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case byts := <-c.write:
|
case byts := <-c.write:
|
||||||
c.wc.SetWriteDeadline(time.Now().Add(writeTimeout))
|
c.wc.SetWriteDeadline(time.Now().Add(writeTimeout)) //nolint:errcheck
|
||||||
err := c.wc.WriteMessage(websocket.TextMessage, byts)
|
err := c.wc.WriteMessage(websocket.TextMessage, byts)
|
||||||
c.writeErr <- err
|
c.writeErr <- err
|
||||||
|
|
||||||
case <-pingTicker.C:
|
case <-pingTicker.C:
|
||||||
c.wc.SetWriteDeadline(time.Now().Add(writeTimeout))
|
c.wc.SetWriteDeadline(time.Now().Add(writeTimeout)) //nolint:errcheck
|
||||||
c.wc.WriteMessage(websocket.PingMessage, nil)
|
c.wc.WriteMessage(websocket.PingMessage, nil) //nolint:errcheck
|
||||||
|
|
||||||
case <-c.terminate:
|
case <-c.terminate:
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ func TestServerConn(t *testing.T) {
|
|||||||
c, res, err := websocket.DefaultDialer.Dial("ws://localhost:6344/", nil)
|
c, res, err := websocket.DefaultDialer.Dial("ws://localhost:6344/", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
defer c.Close()
|
defer c.Close() //nolint:errcheck
|
||||||
|
|
||||||
c.SetPingHandler(func(msg string) error {
|
c.SetPingHandler(func(msg string) error {
|
||||||
close(pingReceived)
|
close(pingReceived)
|
||||||
@@ -49,7 +49,8 @@ func TestServerConn(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, "testing", msg)
|
require.Equal(t, "testing", msg)
|
||||||
|
|
||||||
c.ReadMessage()
|
_, _, err = c.ReadMessage()
|
||||||
|
require.Error(t, err)
|
||||||
|
|
||||||
<-pingReceived
|
<-pingReceived
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ func quoteCredential(v string) string {
|
|||||||
|
|
||||||
func unquoteCredential(v string) string {
|
func unquoteCredential(v string) string {
|
||||||
var s string
|
var s string
|
||||||
json.Unmarshal([]byte("\""+v+"\""), &s)
|
json.Unmarshal([]byte("\""+v+"\""), &s) //nolint:errcheck
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user