mirror of
https://github.com/m1k1o/neko.git
synced 2025-05-28 16:37:15 +02:00
use BroadcatManager
This commit is contained in:
parent
d95947d4ec
commit
b2afd1af6d
6 changed files with 64 additions and 90 deletions
|
@ -17,16 +17,15 @@ type RemoteManager struct {
|
|||
logger zerolog.Logger
|
||||
video *gst.Pipeline
|
||||
audio *gst.Pipeline
|
||||
rtmp *gst.Pipeline
|
||||
config *config.Remote
|
||||
broadcast *config.Broadcast
|
||||
broadcast types.BroadcastManager
|
||||
cleanup *time.Ticker
|
||||
shutdown chan bool
|
||||
emmiter events.EventEmmiter
|
||||
streaming bool
|
||||
}
|
||||
|
||||
func New(config *config.Remote, broadcast *config.Broadcast) *RemoteManager {
|
||||
func New(config *config.Remote, broadcast types.BroadcastManager) *RemoteManager {
|
||||
return &RemoteManager{
|
||||
logger: log.With().Str("module", "remote").Logger(),
|
||||
cleanup: time.NewTicker(1 * time.Second),
|
||||
|
@ -47,7 +46,16 @@ func (manager *RemoteManager) AudioCodec() string {
|
|||
}
|
||||
|
||||
func (manager *RemoteManager) Start() {
|
||||
xorg.Display(manager.config.Display)
|
||||
|
||||
if !xorg.ValidScreenSize(manager.config.ScreenWidth, manager.config.ScreenHeight, manager.config.ScreenRate) {
|
||||
manager.logger.Warn().Msgf("invalid screen option %dx%d@%d", manager.config.ScreenWidth, manager.config.ScreenHeight, manager.config.ScreenRate)
|
||||
} else if err := xorg.ChangeScreenSize(manager.config.ScreenWidth, manager.config.ScreenHeight, manager.config.ScreenRate); err != nil {
|
||||
manager.logger.Warn().Err(err).Msg("unable to change screen size")
|
||||
}
|
||||
|
||||
manager.createPipelines()
|
||||
manager.broadcast.Start()
|
||||
|
||||
go func() {
|
||||
defer func() {
|
||||
|
@ -73,10 +81,7 @@ func (manager *RemoteManager) Shutdown() error {
|
|||
manager.logger.Info().Msgf("remote shutting down")
|
||||
manager.video.Stop()
|
||||
manager.audio.Stop()
|
||||
|
||||
if manager.broadcast.Enabled {
|
||||
manager.rtmp.Stop()
|
||||
}
|
||||
manager.broadcast.Stop()
|
||||
|
||||
manager.cleanup.Stop()
|
||||
manager.shutdown <- true
|
||||
|
@ -96,6 +101,8 @@ func (manager *RemoteManager) OnAudioFrame(listener func(sample types.Sample)) {
|
|||
}
|
||||
|
||||
func (manager *RemoteManager) StartStream() {
|
||||
manager.createPipelines()
|
||||
|
||||
manager.logger.Info().
|
||||
Str("video_display", manager.config.Display).
|
||||
Str("video_codec", manager.config.VideoCodec).
|
||||
|
@ -106,28 +113,8 @@ func (manager *RemoteManager) StartStream() {
|
|||
Str("screen_resolution", fmt.Sprintf("%dx%d@%d", manager.config.ScreenWidth, manager.config.ScreenHeight, manager.config.ScreenRate)).
|
||||
Msgf("Pipelines starting...")
|
||||
|
||||
if manager.broadcast.Enabled {
|
||||
manager.logger.Info().
|
||||
Str("rtmp_pipeline_src", manager.rtmp.Src).
|
||||
Msgf("Prtmp pipeline is starting...")
|
||||
}
|
||||
|
||||
xorg.Display(manager.config.Display)
|
||||
|
||||
if !xorg.ValidScreenSize(manager.config.ScreenWidth, manager.config.ScreenHeight, manager.config.ScreenRate) {
|
||||
manager.logger.Warn().Msgf("invalid screen option %dx%d@%d", manager.config.ScreenWidth, manager.config.ScreenHeight, manager.config.ScreenRate)
|
||||
} else if err := xorg.ChangeScreenSize(manager.config.ScreenWidth, manager.config.ScreenHeight, manager.config.ScreenRate); err != nil {
|
||||
manager.logger.Warn().Err(err).Msg("unable to change screen size")
|
||||
}
|
||||
|
||||
manager.createPipelines()
|
||||
manager.video.Start()
|
||||
manager.audio.Start()
|
||||
|
||||
if manager.broadcast.Enabled {
|
||||
manager.rtmp.Play()
|
||||
}
|
||||
|
||||
manager.streaming = true
|
||||
}
|
||||
|
||||
|
@ -135,11 +122,6 @@ func (manager *RemoteManager) StopStream() {
|
|||
manager.logger.Info().Msgf("Pipelines shutting down...")
|
||||
manager.video.Stop()
|
||||
manager.audio.Stop()
|
||||
|
||||
if manager.broadcast.Enabled {
|
||||
manager.rtmp.Stop()
|
||||
}
|
||||
|
||||
manager.streaming = false
|
||||
}
|
||||
|
||||
|
@ -166,17 +148,6 @@ func (manager *RemoteManager) createPipelines() {
|
|||
if err != nil {
|
||||
manager.logger.Panic().Err(err).Msg("unable to create audio pipeline")
|
||||
}
|
||||
|
||||
if manager.broadcast.Enabled {
|
||||
manager.rtmp, err = gst.CreateRTMPPipeline(
|
||||
manager.config.Device,
|
||||
manager.config.Display,
|
||||
manager.broadcast.RTMP,
|
||||
)
|
||||
if err != nil {
|
||||
manager.logger.Panic().Err(err).Msg("unable to create rtmp pipeline")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (manager *RemoteManager) ChangeResolution(width int, height int, rate int) error {
|
||||
|
@ -185,17 +156,11 @@ func (manager *RemoteManager) ChangeResolution(width int, height int, rate int)
|
|||
}
|
||||
|
||||
manager.video.Stop()
|
||||
|
||||
if manager.broadcast.Enabled {
|
||||
manager.rtmp.Stop()
|
||||
}
|
||||
manager.broadcast.Stop()
|
||||
|
||||
defer func() {
|
||||
manager.video.Start()
|
||||
|
||||
if manager.broadcast.Enabled {
|
||||
manager.rtmp.Play()
|
||||
}
|
||||
manager.broadcast.Start()
|
||||
|
||||
manager.logger.Info().Msg("starting video pipeline...")
|
||||
}()
|
||||
|
@ -204,7 +169,8 @@ func (manager *RemoteManager) ChangeResolution(width int, height int, rate int)
|
|||
return err
|
||||
}
|
||||
|
||||
video, err := gst.CreateAppPipeline(
|
||||
var err error
|
||||
manager.video, err = gst.CreateAppPipeline(
|
||||
manager.config.VideoCodec,
|
||||
manager.config.Display,
|
||||
manager.config.VideoParams,
|
||||
|
@ -212,19 +178,6 @@ func (manager *RemoteManager) ChangeResolution(width int, height int, rate int)
|
|||
if err != nil {
|
||||
manager.logger.Panic().Err(err).Msg("unable to create new video pipeline")
|
||||
}
|
||||
manager.video = video
|
||||
|
||||
if manager.broadcast.Enabled {
|
||||
rtmp, err := gst.CreateRTMPPipeline(
|
||||
manager.config.Device,
|
||||
manager.config.Display,
|
||||
manager.broadcast.RTMP,
|
||||
)
|
||||
if err != nil {
|
||||
manager.logger.Panic().Err(err).Msg("unable to create new rtmp pipeline")
|
||||
}
|
||||
manager.rtmp = rtmp
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue