fix crash when udp is disabled (#69)

This commit is contained in:
aler9 2020-08-29 19:48:41 +02:00
parent 476262e02d
commit 1b8177eb96
2 changed files with 55 additions and 14 deletions

34
main.go
View File

@ -247,21 +247,21 @@ func newProgram(args []string, stdin io.Reader) (*program, error) {
http.DefaultServeMux = http.NewServeMux()
}
p.serverRtp, err = newServerUdp(p, conf.RtpPort, gortsplib.StreamTypeRtp)
if err != nil {
return nil, err
}
if _, ok := conf.protocolsParsed[gortsplib.StreamProtocolUdp]; ok {
p.serverRtp, err = newServerUdp(p, conf.RtpPort, gortsplib.StreamTypeRtp)
if err != nil {
return nil, err
}
p.serverRtcp, err = newServerUdp(p, conf.RtcpPort, gortsplib.StreamTypeRtcp)
if err != nil {
return nil, err
}
}
p.serverRtsp, err = newServerTcp(p)
if err != nil {
return nil, err
}
p.serverRtsp, err = newServerTcp(p)
if err != nil {
return nil, err
}
for name, confp := range conf.Paths {
@ -284,12 +284,18 @@ func newProgram(args []string, stdin io.Reader) (*program, error) {
if p.metrics != nil {
go p.metrics.run()
}
go p.serverRtp.run()
go p.serverRtcp.run()
go p.serverRtsp.run()
if _, ok := conf.protocolsParsed[gortsplib.StreamProtocolUdp]; ok {
go p.serverRtp.run()
go p.serverRtcp.run()
}
for _, s := range p.sources {
go s.run()
}
go p.serverRtsp.run()
go p.run()
return p, nil
@ -541,13 +547,13 @@ outer:
cmd.Wait()
}
p.serverRtsp.close()
for _, s := range p.sources {
s.events <- sourceEventTerminate{}
<-s.done
}
p.serverRtsp.close()
if _, ok := p.conf.protocolsParsed[gortsplib.StreamProtocolUdp]; ok {
p.serverRtcp.close()
p.serverRtp.close()

View File

@ -213,6 +213,41 @@ func TestRead(t *testing.T) {
}
}
func TestTcpOnly(t *testing.T) {
stdin := []byte("\n" +
"protocols: [tcp]\n")
p, err := newProgram([]string{"stdin"}, bytes.NewBuffer(stdin))
require.NoError(t, err)
defer p.close()
time.Sleep(1 * time.Second)
cnt1, err := newContainer("ffmpeg", "publish", []string{
"-re",
"-stream_loop", "-1",
"-i", "/emptyvideo.ts",
"-c", "copy",
"-f", "rtsp",
"-rtsp_transport", "tcp",
"rtsp://" + ownDockerIp + ":8554/teststream",
})
require.NoError(t, err)
defer cnt1.close()
cnt2, err := newContainer("ffmpeg", "read", []string{
"-rtsp_transport", "tcp",
"-i", "rtsp://" + ownDockerIp + ":8554/teststream",
"-vframes", "1",
"-f", "image2",
"-y", "/dev/null",
})
require.NoError(t, err)
defer cnt2.close()
code := cnt2.wait()
require.Equal(t, 0, code)
}
func TestAuth(t *testing.T) {
t.Run("publish", func(t *testing.T) {
stdin := []byte("\n" +