适配引擎变更

This commit is contained in:
dexter
2022-02-07 17:29:36 +08:00
parent c1fedbc529
commit 3c227c4acb
2 changed files with 26 additions and 31 deletions

39
main.go
View File

@@ -10,43 +10,40 @@ import (
) )
type RTMPConfig struct { type RTMPConfig struct {
Publish PublishConfig Publish PublishConfig
Subscribe SubscribeConfig Subscribe SubscribeConfig
ListenAddr string TCPConfig
ChunkSize int ChunkSize int
context.Context context.Context
cancel context.CancelFunc cancel context.CancelFunc
} }
var config = &RTMPConfig{ var config = &RTMPConfig{
Publish: DefaultPublishConfig, Publish: DefaultPublishConfig,
Subscribe: DefaultSubscribeConfig, Subscribe: DefaultSubscribeConfig,
ChunkSize: 4096, ChunkSize: 4096,
ListenAddr: ":1935", TCPConfig: TCPConfig{ListenAddr: ":1935"},
} }
func (cfg *RTMPConfig) Update(override map[string]any) { func (cfg *RTMPConfig) Update(override Config) {
if cfg.cancel == nil || (override != nil && override["ListenAddr"] != nil) { override.Unmarshal(cfg)
start()
}
}
func init() {
InstallPlugin(config)
}
func start() {
if config.cancel == nil { if config.cancel == nil {
util.Print(Green("server rtmp start at"), BrightBlue(config.ListenAddr)) util.Print(Green("server rtmp start at"), BrightBlue(config.ListenAddr))
} else { } else if override.Has("ListenAddr") {
config.cancel() config.cancel()
util.Print(Green("server rtmp restart at"), BrightBlue(config.ListenAddr)) util.Print(Green("server rtmp restart at"), BrightBlue(config.ListenAddr))
} else {
return
} }
config.Context, config.cancel = context.WithCancel(Ctx) config.Context, config.cancel = context.WithCancel(Ctx)
err := util.ListenTCP(config.ListenAddr, config) err := cfg.Listen(cfg)
if err == context.Canceled { if err == context.Canceled {
log.Println(err) log.Println(err)
} else { } else {
log.Fatal(err) log.Fatal(err)
} }
} }
func init() {
InstallPlugin(config)
}

View File

@@ -14,7 +14,7 @@ import (
var gstreamid = uint32(64) var gstreamid = uint32(64)
func (cfg *RTMPConfig) Process(conn *net.TCPConn) { func (cfg *RTMPConfig) ServeTCP(conn *net.TCPConn) {
nc := NetConnection{ nc := NetConnection{
TCPConn: conn, TCPConn: conn,
Reader: bufio.NewReader(conn), Reader: bufio.NewReader(conn),
@@ -132,28 +132,26 @@ func (cfg *RTMPConfig) Process(conn *net.TCPConn) {
err = nc.SendStreamID(RTMP_USER_STREAM_BEGIN) err = nc.SendStreamID(RTMP_USER_STREAM_BEGIN)
err = nc.SendCommand(SEND_PLAY_RESPONSE_MESSAGE, newPlayResponseMessageData(nc.streamID, NetStream_Play_Reset, Level_Status)) err = nc.SendCommand(SEND_PLAY_RESPONSE_MESSAGE, newPlayResponseMessageData(nc.streamID, NetStream_Play_Reset, Level_Status))
err = nc.SendCommand(SEND_PLAY_RESPONSE_MESSAGE, newPlayResponseMessageData(nc.streamID, NetStream_Play_Start, Level_Status)) err = nc.SendCommand(SEND_PLAY_RESPONSE_MESSAGE, newPlayResponseMessageData(nc.streamID, NetStream_Play_Start, Level_Status))
vt, at := subscriber.WaitVideoTrack("h264", "h265"), subscriber.WaitAudioTrack("aac", "pcma", "pcmu") vt, at := subscriber.WaitVideoTrack(), subscriber.WaitAudioTrack()
if vt != nil { if vt != nil {
frame := vt.DecoderConfiguration frame := vt.DecoderConfiguration
err = nc.sendAVMessage(0, frame.AVCC, false, true) err = nc.sendAVMessage(0, frame.AVCC, false, true)
subscriber.OnVideo = func(frame *engine.VideoFrame) bool { subscriber.OnVideo = func(frame *engine.VideoFrame) error {
err = nc.sendAVMessage(frame.DeltaTime, frame.AVCC, false, false) return nc.sendAVMessage(frame.DeltaTime, frame.AVCC, false, false)
return err == nil
} }
} }
if at != nil { if at != nil {
subscriber.OnAudio = func(frame *engine.AudioFrame) bool { subscriber.OnAudio = func(frame *engine.AudioFrame) (err error) {
if at.CodecID == codec.CodecID_AAC { if at.CodecID == codec.CodecID_AAC {
frame := at.DecoderConfiguration frame := at.DecoderConfiguration
err = nc.sendAVMessage(0, frame.AVCC, true, true) err = nc.sendAVMessage(0, frame.AVCC, true, true)
} else { } else {
err = nc.sendAVMessage(0, frame.AVCC, true, true) err = nc.sendAVMessage(0, frame.AVCC, true, true)
} }
subscriber.OnAudio = func(frame *engine.AudioFrame) bool { subscriber.OnAudio = func(frame *engine.AudioFrame) error {
err = nc.sendAVMessage(frame.DeltaTime, frame.AVCC, true, false) return nc.sendAVMessage(frame.DeltaTime, frame.AVCC, true, false)
return err == nil
} }
return err == nil return
} }
} }
go subscriber.Play(at, vt) go subscriber.Play(at, vt)