mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
refactor: frame converter and mp4 track improvements
- Refactor frame converter implementation - Update mp4 track to use ICodex - General refactoring and code improvements 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,20 +0,0 @@
|
||||
package transcode
|
||||
|
||||
import (
|
||||
"m7s.live/v5"
|
||||
"m7s.live/v5/pkg/task"
|
||||
)
|
||||
|
||||
func NewPuller() m7s.IPuller {
|
||||
return &Puller{}
|
||||
}
|
||||
|
||||
type Puller struct {
|
||||
task.Task
|
||||
PullJob m7s.PullJob
|
||||
}
|
||||
|
||||
func (p *Puller) GetPullJob() *m7s.PullJob {
|
||||
return &p.PullJob
|
||||
|
||||
}
|
||||
@@ -30,7 +30,7 @@ const (
|
||||
)
|
||||
|
||||
type (
|
||||
TransMode string
|
||||
TransMode = string
|
||||
DecodeConfig struct {
|
||||
Mode TransMode `default:"pipe" json:"mode" desc:"转码模式"` //转码模式
|
||||
Codec string `json:"codec" desc:"解码器"`
|
||||
@@ -169,14 +169,13 @@ func (t *Transformer) Start() (err error) {
|
||||
t.ffmpeg.Stderr = os.Stderr
|
||||
}
|
||||
t.Info("start exec", "cmd", t.ffmpeg.String())
|
||||
return t.ffmpeg.Start()
|
||||
return
|
||||
}
|
||||
|
||||
func (t *Transformer) Go() error {
|
||||
t.SetDescription("pid", t.ffmpeg.Process.Pid)
|
||||
if t.From.Mode == "pipe" {
|
||||
rBuf := make(chan []byte, 100)
|
||||
t.ffmpeg.Stdin = util.NewBufReaderChan(rBuf)
|
||||
bufReader := util.NewBufReaderChan(100)
|
||||
t.ffmpeg.Stdin = bufReader
|
||||
var live flv.Live
|
||||
live.Subscriber = t.TransformJob.Subscriber
|
||||
var bufferFull time.Time
|
||||
@@ -185,10 +184,9 @@ func (t *Transformer) Go() error {
|
||||
for _, b := range flv {
|
||||
buffer = append(buffer, b...)
|
||||
}
|
||||
select {
|
||||
case rBuf <- buffer:
|
||||
if bufReader.Feed(buffer) {
|
||||
bufferFull = time.Now()
|
||||
default:
|
||||
} else {
|
||||
t.Warn("pipe input buffer full")
|
||||
if time.Since(bufferFull) > time.Second*5 {
|
||||
t.Stop(bufio.ErrBufferFull)
|
||||
@@ -196,9 +194,19 @@ func (t *Transformer) Go() error {
|
||||
}
|
||||
return
|
||||
}
|
||||
defer close(rBuf)
|
||||
defer bufReader.Recycle()
|
||||
err := t.ffmpeg.Start()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
t.SetDescription("pid", t.ffmpeg.Process.Pid)
|
||||
return live.Run()
|
||||
} else {
|
||||
err := t.ffmpeg.Start()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
t.SetDescription("pid", t.ffmpeg.Process.Pid)
|
||||
if err := t.ffmpeg.Wait(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user