Skip to content

Commit 9fa08c0

Browse files
committed
add events to hls.
1 parent 44af181 commit 9fa08c0

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

hls/manager.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ type ManagerCtx struct {
3737
mu sync.Mutex
3838
cmdFactory func() *exec.Cmd
3939
active bool
40+
events struct {
41+
onStart func()
42+
onCmdLog func(message string)
43+
onStop func()
44+
}
4045

4146
cmd *exec.Cmd
4247
tempdir string
@@ -77,7 +82,12 @@ func (m *ManagerCtx) Start() error {
7782

7883
m.cmd = m.cmdFactory()
7984
m.cmd.Dir = m.tempdir
80-
m.cmd.Stderr = utils.LogWriter(m.logger)
85+
86+
if m.events.onStart != nil {
87+
m.cmd.Stderr = utils.LogEvent(m.events.onCmdLog)
88+
} else {
89+
m.cmd.Stderr = utils.LogWriter(m.logger)
90+
}
8191

8292
read, write := io.Pipe()
8393
m.cmd.Stdout = write
@@ -138,6 +148,10 @@ func (m *ManagerCtx) Start() error {
138148
}
139149
}()
140150

151+
if m.events.onStart != nil {
152+
m.events.onStart()
153+
}
154+
141155
return m.cmd.Start()
142156
}
143157

@@ -162,6 +176,10 @@ func (m *ManagerCtx) Stop() {
162176
err := os.RemoveAll(m.tempdir)
163177
m.logger.Err(err).Msg("removing tempdir")
164178
})
179+
180+
if m.events.onStop != nil {
181+
m.events.onStop()
182+
}
165183
}
166184

167185
func (m *ManagerCtx) Cleanup() {
@@ -239,3 +257,15 @@ func (m *ManagerCtx) ServeMedia(w http.ResponseWriter, r *http.Request) {
239257
w.Header().Set("Cache-Control", "no-cache")
240258
http.ServeFile(w, r, path)
241259
}
260+
261+
func (m *ManagerCtx) OnStart(event func()) {
262+
m.events.onStart = event
263+
}
264+
265+
func (m *ManagerCtx) OnCmdLog(event func(message string)) {
266+
m.events.onCmdLog = event
267+
}
268+
269+
func (m *ManagerCtx) OnStop(event func()) {
270+
m.events.onStop = event
271+
}

hls/types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,8 @@ type Manager interface {
99

1010
ServePlaylist(w http.ResponseWriter, r *http.Request)
1111
ServeMedia(w http.ResponseWriter, r *http.Request)
12+
13+
OnStart(event func())
14+
OnCmdLog(event func(message string))
15+
OnStop(event func())
1216
}

internal/utils/logevent.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package utils
2+
3+
import "strings"
4+
5+
type LogEventCtx struct {
6+
event func(message string)
7+
}
8+
9+
func LogEvent(event func(message string)) *LogEventCtx {
10+
return &LogEventCtx{
11+
event: event,
12+
}
13+
}
14+
15+
func (l LogEventCtx) Write(p []byte) (n int, err error) {
16+
l.event(strings.TrimSpace(string(p)))
17+
return len(p), nil
18+
}

0 commit comments

Comments
 (0)