Browse Source

update gortsplib

pull/858/head
aler9 4 years ago
parent
commit
43471a05ab
  1. 2
      go.mod
  2. 4
      go.sum
  3. 16
      internal/core/rtmp_conn.go
  4. 6
      internal/core/rtmp_server.go
  5. 8
      internal/core/rtsp_server.go
  6. 30
      internal/core/rtsp_session.go

2
go.mod

@ -4,7 +4,7 @@ go 1.17 @@ -4,7 +4,7 @@ go 1.17
require (
code.cloudfoundry.org/bytefmt v0.0.0-20211005130812-5bb3c17173e5
github.com/aler9/gortsplib v0.0.0-20220217230339-d44f1eb03a9f
github.com/aler9/gortsplib v0.0.0-20220218090847-a7ce5b7a533f
github.com/asticode/go-astits v1.10.0
github.com/fsnotify/fsnotify v1.4.9
github.com/gin-gonic/gin v1.7.2

4
go.sum

@ -4,8 +4,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafo @@ -4,8 +4,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafo
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/aler9/gortsplib v0.0.0-20220217230339-d44f1eb03a9f h1:NIH+yILuAy6RP6mjzt/c+dIBB23FDFK3hk29VfRByxk=
github.com/aler9/gortsplib v0.0.0-20220217230339-d44f1eb03a9f/go.mod h1:mst8cTkmxLn8Osiug8HBjMsNFRt0u7QHt5phJQ1tFVw=
github.com/aler9/gortsplib v0.0.0-20220218090847-a7ce5b7a533f h1:MBabV0U8CP1PjN8uQ9qritMQXQifAotqEUA0hQZQnZQ=
github.com/aler9/gortsplib v0.0.0-20220218090847-a7ce5b7a533f/go.mod h1:mst8cTkmxLn8Osiug8HBjMsNFRt0u7QHt5phJQ1tFVw=
github.com/aler9/rtmp v0.0.0-20210403095203-3be4a5535927 h1:95mXJ5fUCYpBRdSOnLAQAdJHHKxxxJrVCiaqDi965YQ=
github.com/aler9/rtmp v0.0.0-20210403095203-3be4a5535927/go.mod h1:vzuE21rowz+lT1NGsWbreIvYulgBpCGnQyeTyFblUHc=
github.com/asticode/go-astikit v0.20.0 h1:+7N+J4E4lWx2QOkRdOf6DafWJMv6O4RRfgClwQokrH8=

16
internal/core/rtmp_conn.go

@ -38,6 +38,14 @@ func pathNameAndQuery(inURL *url.URL) (string, url.Values, string) { @@ -38,6 +38,14 @@ func pathNameAndQuery(inURL *url.URL) (string, url.Values, string) {
return pathName, ur.Query(), ur.RawQuery
}
type rtmpConnState int
const (
rtmpConnStateIdle rtmpConnState = iota //nolint:deadcode,varcheck
rtmpConnStateRead
rtmpConnStatePublish
)
type rtmpConnTrackIDPayloadPair struct {
trackID int
packet *rtp.Packet
@ -72,7 +80,7 @@ type rtmpConn struct { @@ -72,7 +80,7 @@ type rtmpConn struct {
ctxCancel func()
path *path
ringBuffer *ringbuffer.RingBuffer // read
state gortsplib.ServerSessionState
state rtmpConnState
stateMutex sync.Mutex
}
@ -142,7 +150,7 @@ func (c *rtmpConn) ip() net.IP { @@ -142,7 +150,7 @@ func (c *rtmpConn) ip() net.IP {
return c.conn.RemoteAddr().(*net.TCPAddr).IP
}
func (c *rtmpConn) safeState() gortsplib.ServerSessionState {
func (c *rtmpConn) safeState() rtmpConnState {
c.stateMutex.Lock()
defer c.stateMutex.Unlock()
return c.state
@ -247,7 +255,7 @@ func (c *rtmpConn) runRead(ctx context.Context) error { @@ -247,7 +255,7 @@ func (c *rtmpConn) runRead(ctx context.Context) error {
}()
c.stateMutex.Lock()
c.state = gortsplib.ServerSessionStateRead
c.state = rtmpConnStateRead
c.stateMutex.Unlock()
var videoTrack *gortsplib.TrackH264
@ -480,7 +488,7 @@ func (c *rtmpConn) runPublish(ctx context.Context) error { @@ -480,7 +488,7 @@ func (c *rtmpConn) runPublish(ctx context.Context) error {
}()
c.stateMutex.Lock()
c.state = gortsplib.ServerSessionStatePublish
c.state = rtmpConnStatePublish
c.stateMutex.Unlock()
// disable write deadline

6
internal/core/rtmp_server.go

@ -9,8 +9,6 @@ import ( @@ -9,8 +9,6 @@ import (
"strconv"
"sync"
"github.com/aler9/gortsplib"
"github.com/aler9/rtsp-simple-server/internal/conf"
"github.com/aler9/rtsp-simple-server/internal/externalcmd"
"github.com/aler9/rtsp-simple-server/internal/logger"
@ -208,10 +206,10 @@ outer: @@ -208,10 +206,10 @@ outer:
RemoteAddr: c.RemoteAddr().String(),
State: func() string {
switch c.safeState() {
case gortsplib.ServerSessionStateRead:
case rtmpConnStateRead:
return "read"
case gortsplib.ServerSessionStatePublish:
case rtmpConnStatePublish:
return "publish"
}
return "idle"

8
internal/core/rtsp_server.go

@ -421,12 +421,12 @@ func (s *rtspServer) onAPISessionsList(req rtspServerAPISessionsListReq) rtspSer @@ -421,12 +421,12 @@ func (s *rtspServer) onAPISessionsList(req rtspServerAPISessionsListReq) rtspSer
RemoteAddr: s.RemoteAddr().String(),
State: func() string {
switch s.safeState() {
case gortsplib.ServerSessionStatePreRead,
gortsplib.ServerSessionStateRead:
case gortsplib.ServerSessionStatePrePlay,
gortsplib.ServerSessionStatePlay:
return "read"
case gortsplib.ServerSessionStatePrePublish,
gortsplib.ServerSessionStatePublish:
case gortsplib.ServerSessionStatePreRecord,
gortsplib.ServerSessionStateRecord:
return "publish"
}
return "idle"

30
internal/core/rtsp_session.go

@ -104,7 +104,7 @@ func (s *rtspSession) log(level logger.Level, format string, args ...interface{} @@ -104,7 +104,7 @@ func (s *rtspSession) log(level logger.Level, format string, args ...interface{}
// onClose is called by rtspServer.
func (s *rtspSession) onClose(err error) {
if s.ss.State() == gortsplib.ServerSessionStateRead {
if s.ss.State() == gortsplib.ServerSessionStatePlay {
if s.onReadCmd != nil {
s.onReadCmd.Close()
s.onReadCmd = nil
@ -113,11 +113,11 @@ func (s *rtspSession) onClose(err error) { @@ -113,11 +113,11 @@ func (s *rtspSession) onClose(err error) {
}
switch s.ss.State() {
case gortsplib.ServerSessionStatePreRead, gortsplib.ServerSessionStateRead:
case gortsplib.ServerSessionStatePrePlay, gortsplib.ServerSessionStatePlay:
s.path.onReaderRemove(pathReaderRemoveReq{author: s})
s.path = nil
case gortsplib.ServerSessionStatePrePublish, gortsplib.ServerSessionStatePublish:
case gortsplib.ServerSessionStatePreRecord, gortsplib.ServerSessionStateRecord:
s.path.onPublisherRemove(pathPublisherRemoveReq{author: s})
s.path = nil
}
@ -161,7 +161,7 @@ func (s *rtspSession) onAnnounce(c *rtspConn, ctx *gortsplib.ServerHandlerOnAnno @@ -161,7 +161,7 @@ func (s *rtspSession) onAnnounce(c *rtspConn, ctx *gortsplib.ServerHandlerOnAnno
s.announcedTracks = ctx.Tracks
s.stateMutex.Lock()
s.state = gortsplib.ServerSessionStatePrePublish
s.state = gortsplib.ServerSessionStatePreRecord
s.stateMutex.Unlock()
return &base.Response{
@ -185,7 +185,7 @@ func (s *rtspSession) onSetup(c *rtspConn, ctx *gortsplib.ServerHandlerOnSetupCt @@ -185,7 +185,7 @@ func (s *rtspSession) onSetup(c *rtspConn, ctx *gortsplib.ServerHandlerOnSetupCt
}
switch s.ss.State() {
case gortsplib.ServerSessionStateInitial, gortsplib.ServerSessionStatePreRead: // play
case gortsplib.ServerSessionStateInitial, gortsplib.ServerSessionStatePrePlay: // play
res := s.pathManager.onReaderSetupPlay(pathReaderSetupPlayReq{
author: s,
pathName: ctx.Path,
@ -235,7 +235,7 @@ func (s *rtspSession) onSetup(c *rtspConn, ctx *gortsplib.ServerHandlerOnSetupCt @@ -235,7 +235,7 @@ func (s *rtspSession) onSetup(c *rtspConn, ctx *gortsplib.ServerHandlerOnSetupCt
s.setuppedTracks[ctx.TrackID] = res.stream.tracks()[ctx.TrackID]
s.stateMutex.Lock()
s.state = gortsplib.ServerSessionStatePreRead
s.state = gortsplib.ServerSessionStatePrePlay
s.stateMutex.Unlock()
return &base.Response{
@ -253,7 +253,7 @@ func (s *rtspSession) onSetup(c *rtspConn, ctx *gortsplib.ServerHandlerOnSetupCt @@ -253,7 +253,7 @@ func (s *rtspSession) onSetup(c *rtspConn, ctx *gortsplib.ServerHandlerOnSetupCt
func (s *rtspSession) onPlay(ctx *gortsplib.ServerHandlerOnPlayCtx) (*base.Response, error) {
h := make(base.Header)
if s.ss.State() == gortsplib.ServerSessionStatePreRead {
if s.ss.State() == gortsplib.ServerSessionStatePrePlay {
s.path.onReaderPlay(pathReaderPlayReq{author: s})
if s.path.Conf().RunOnRead != "" {
@ -269,7 +269,7 @@ func (s *rtspSession) onPlay(ctx *gortsplib.ServerHandlerOnPlayCtx) (*base.Respo @@ -269,7 +269,7 @@ func (s *rtspSession) onPlay(ctx *gortsplib.ServerHandlerOnPlayCtx) (*base.Respo
}
s.stateMutex.Lock()
s.state = gortsplib.ServerSessionStateRead
s.state = gortsplib.ServerSessionStatePlay
s.stateMutex.Unlock()
}
@ -294,7 +294,7 @@ func (s *rtspSession) onRecord(ctx *gortsplib.ServerHandlerOnRecordCtx) (*base.R @@ -294,7 +294,7 @@ func (s *rtspSession) onRecord(ctx *gortsplib.ServerHandlerOnRecordCtx) (*base.R
s.stream = res.stream
s.stateMutex.Lock()
s.state = gortsplib.ServerSessionStatePublish
s.state = gortsplib.ServerSessionStateRecord
s.stateMutex.Unlock()
return &base.Response{
@ -305,7 +305,7 @@ func (s *rtspSession) onRecord(ctx *gortsplib.ServerHandlerOnRecordCtx) (*base.R @@ -305,7 +305,7 @@ func (s *rtspSession) onRecord(ctx *gortsplib.ServerHandlerOnRecordCtx) (*base.R
// onPause is called by rtspServer.
func (s *rtspSession) onPause(ctx *gortsplib.ServerHandlerOnPauseCtx) (*base.Response, error) {
switch s.ss.State() {
case gortsplib.ServerSessionStateRead:
case gortsplib.ServerSessionStatePlay:
if s.onReadCmd != nil {
s.log(logger.Info, "runOnRead command stopped")
s.onReadCmd.Close()
@ -314,14 +314,14 @@ func (s *rtspSession) onPause(ctx *gortsplib.ServerHandlerOnPauseCtx) (*base.Res @@ -314,14 +314,14 @@ func (s *rtspSession) onPause(ctx *gortsplib.ServerHandlerOnPauseCtx) (*base.Res
s.path.onReaderPause(pathReaderPauseReq{author: s})
s.stateMutex.Lock()
s.state = gortsplib.ServerSessionStatePreRead
s.state = gortsplib.ServerSessionStatePrePlay
s.stateMutex.Unlock()
case gortsplib.ServerSessionStatePublish:
case gortsplib.ServerSessionStateRecord:
s.path.onPublisherPause(pathPublisherPauseReq{author: s})
s.stateMutex.Lock()
s.state = gortsplib.ServerSessionStatePrePublish
s.state = gortsplib.ServerSessionStatePreRecord
s.stateMutex.Unlock()
}
@ -402,7 +402,7 @@ func (s *rtspSession) onPublisherAccepted(tracksLen int) { @@ -402,7 +402,7 @@ func (s *rtspSession) onPublisherAccepted(tracksLen int) {
// onPacketRTP is called by rtspServer.
func (s *rtspSession) onPacketRTP(ctx *gortsplib.ServerHandlerOnPacketRTPCtx) {
if s.ss.State() != gortsplib.ServerSessionStatePublish {
if s.ss.State() != gortsplib.ServerSessionStateRecord {
return
}
@ -411,7 +411,7 @@ func (s *rtspSession) onPacketRTP(ctx *gortsplib.ServerHandlerOnPacketRTPCtx) { @@ -411,7 +411,7 @@ func (s *rtspSession) onPacketRTP(ctx *gortsplib.ServerHandlerOnPacketRTPCtx) {
// onPacketRTCP is called by rtspServer.
func (s *rtspSession) onPacketRTCP(ctx *gortsplib.ServerHandlerOnPacketRTCPCtx) {
if s.ss.State() != gortsplib.ServerSessionStatePublish {
if s.ss.State() != gortsplib.ServerSessionStateRecord {
return
}

Loading…
Cancel
Save