mirror of
https://github.com/Monibuca/plugin-rtmp.git
synced 2025-10-06 16:07:16 +08:00
适配引擎变更
This commit is contained in:
39
main.go
39
main.go
@@ -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)
|
||||||
|
}
|
||||||
|
18
netStream.go
18
netStream.go
@@ -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)
|
||||||
|
Reference in New Issue
Block a user