fix: subscribe will block event bus

This commit is contained in:
langhuihui
2023-04-29 22:14:02 +08:00
parent 4604fd1dd1
commit d717b68e62
8 changed files with 20 additions and 29 deletions

View File

@@ -1,2 +1,3 @@
subscribe:
submode: 1
internal: true

1
flv.go
View File

@@ -96,6 +96,7 @@ func (r *FLVRecorder) writeMetaData(file *os.File, duration int64) {
defer func() {
tempFile.Close()
os.Remove(tempFile.Name())
r.Info("writeMetaData success")
}()
_, err := tempFile.Write([]byte{'F', 'L', 'V', 0x01, flags, 0, 0, 0, 9, 0, 0, 0, 0})
if err != nil {

4
go.mod
View File

@@ -5,7 +5,7 @@ go 1.19
require (
github.com/edgeware/mp4ff v0.28.0
go.uber.org/zap v1.23.0
m7s.live/engine/v4 v4.12.0
m7s.live/engine/v4 v4.12.6
m7s.live/plugin/hls/v4 v4.0.0-20220619163635-447976e65ab9
)
@@ -35,7 +35,7 @@ require (
github.com/shirou/gopsutil/v3 v3.22.10 // indirect
github.com/tklauser/go-sysconf v0.3.11 // indirect
github.com/tklauser/numcpus v0.6.0 // indirect
github.com/yapingcat/gomedia v0.0.0-20230222121919-c67df405bf33 // indirect
github.com/yapingcat/gomedia v0.0.0-20230426092936-387031404274 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/multierr v1.8.0 // indirect

8
go.sum
View File

@@ -151,8 +151,8 @@ github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7Am
github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms=
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/yapingcat/gomedia v0.0.0-20230222121919-c67df405bf33 h1:uyZY++dluUg7iTSsNzuOVln/mC2U2KXwgKLfKLCJ74Y=
github.com/yapingcat/gomedia v0.0.0-20230222121919-c67df405bf33/go.mod h1:WSZ59bidJOO40JSJmLqlkBJrjZCtjbKKkygEMfzY/kc=
github.com/yapingcat/gomedia v0.0.0-20230426092936-387031404274 h1:cj4I+bvWX9I+Hg6tnZ7DAiOVxzhyLhdvYVKp+WpM/2c=
github.com/yapingcat/gomedia v0.0.0-20230426092936-387031404274/go.mod h1:WSZ59bidJOO40JSJmLqlkBJrjZCtjbKKkygEMfzY/kc=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
@@ -281,7 +281,7 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
m7s.live/engine/v4 v4.12.0 h1:CRPbJ0jhHVZArc5mvV7e6Seb4Ye816kGzs3FOVKnfHw=
m7s.live/engine/v4 v4.12.0/go.mod h1:AiJPBwdA77DM3fymlcH2qYPR8ivL6ib9UVLm1Rft/to=
m7s.live/engine/v4 v4.12.6 h1:JWUwxOVHzL9wh8JbWUtZaDsRBXzyAzPI+4UEMGftsU0=
m7s.live/engine/v4 v4.12.6/go.mod h1:LoALBfV5rmsz5TJQr6cmLxM33mfUE5BKBq/sMtXOVlc=
m7s.live/plugin/hls/v4 v4.0.0-20220619163635-447976e65ab9 h1:EcB8awppfwza+s4ECjUr3xLTtl9BgJcZ12EgfE/L2YA=
m7s.live/plugin/hls/v4 v4.0.0-20220619163635-447976e65ab9/go.mod h1:Qn4dDz5xlyBJwO+eZ3w8CUQ8Hl6KN1nmv0a3IsOjJvw=

16
main.go
View File

@@ -65,29 +65,23 @@ func (conf *RecordConfig) OnEvent(event any) {
streamPath := v.Target.Path
if conf.Flv.NeedRecord(streamPath) {
var flv FLVRecorder
flv.IsInternal = true
if flv.Start(streamPath) == nil {
conf.Flv.recording[streamPath] = &flv
}
go flv.Start(streamPath)
}
if conf.Mp4.NeedRecord(streamPath) {
if recoder := NewMP4Recorder(); recoder.Start(streamPath) == nil {
recoder := NewMP4Recorder()
conf.Mp4.recording[streamPath] = recoder
}
go recoder.Start(streamPath)
}
if conf.Hls.NeedRecord(streamPath) {
var hls HLSRecorder
hls.IsInternal = true
if hls.Start(streamPath) == nil {
conf.Hls.recording[streamPath] = &hls
}
go hls.Start(streamPath)
}
if conf.Raw.NeedRecord(streamPath) {
var raw RawRecorder
raw.IsInternal = true
if raw.Start(streamPath) == nil {
conf.Raw.recording[streamPath] = &raw
}
go raw.Start(streamPath)
}
}
}

3
mp4.go
View File

@@ -41,7 +41,7 @@ func (m *mediaContext) push(recoder *MP4Recorder, dt uint32, dur uint32, data []
type MP4Recorder struct {
Recorder
*mp4.InitSegment `json:"-"`
*mp4.InitSegment `json:"-" yaml:"-"`
video mediaContext
audio mediaContext
seqNumber uint32
@@ -52,7 +52,6 @@ func NewMP4Recorder() *MP4Recorder {
r := &MP4Recorder{
InitSegment: mp4.CreateEmptyInit(),
}
r.IsInternal = true
r.Moov.Mvhd.NextTrackID = 1
return r
}

View File

@@ -52,23 +52,19 @@ func (conf *RecordConfig) API_start(w http.ResponseWriter, r *http.Request) {
fallthrough
case "flv":
var flvRecoder FLVRecorder
flvRecoder.IsInternal = true
flvRecoder.append = query.Get("append") != ""
err = flvRecoder.Start(streamPath)
id = flvRecoder.ID
case "mp4":
recorder := NewMP4Recorder()
recorder.IsInternal = true
err = recorder.Start(streamPath)
id = recorder.ID
case "hls":
var recorder HLSRecorder
recorder.IsInternal = true
err = recorder.Start(streamPath)
id = recorder.ID
case "raw":
var recorder RawRecorder
recorder.IsInternal = true
recorder.append = query.Get("append") != ""
err = recorder.Start(streamPath)
id = recorder.ID

View File

@@ -11,7 +11,7 @@ import (
type Recorder struct {
Subscriber
SkipTS uint32
*Record `json:"-"`
*Record `json:"-" yaml:"-"`
newFile bool // 创建了新的文件
append bool // 是否追加模式
}