Various fixes & improvement tweaks

This commit is contained in:
John Nguyen 2024-01-26 15:17:10 +11:00
parent acc3c286a1
commit d298d0c97b
9 changed files with 53 additions and 9 deletions

View file

@ -10,6 +10,13 @@ import (
"m1k1o/neko/internal/types"
)
type PipelineSignal int
const (
PL_STOP PipelineSignal = 0x00
PL_START = 0x01
)
type BroacastManagerCtx struct {
logger zerolog.Logger
mu sync.Mutex
@ -18,6 +25,7 @@ type BroacastManagerCtx struct {
pipelineMu sync.Mutex
pipelineFn func(url string) (string, error)
pipelineRestart chan bool
pipelineSignal chan PipelineSignal
url string
started bool
@ -77,6 +85,10 @@ func (manager *BroacastManagerCtx) GetRestart() chan bool {
return manager.pipelineRestart
}
func (manager *BroacastManagerCtx) GetSignal() chan PipelineSignal {
return manager.pipelineSignal
}
func (manager *BroacastManagerCtx) Url() string {
manager.mu.Lock()
defer manager.mu.Unlock()

View file

@ -72,6 +72,26 @@ func (manager *CaptureManagerCtx) Start() {
}
}()
go func() {
for {
signal, ok := <-manager.broadcast.GetSignal()
if !ok {
return
}
switch signal {
case PL_START:
if !manager.broadcast.Started() {
manager.broadcast.Start(manager.broadcast.Url())
}
case PL_STOP:
if manager.broadcast.Started() {
manager.broadcast.Stop()
}
}
}
}()
go func() {
for {
before, ok := <-manager.desktop.GetScreenSizeChangeChannel()

View file

@ -47,8 +47,9 @@ func NewBroadcastPipeline(device string, display string, pipelineSrc string, url
// replace display
pipelineStr = strings.Replace(pipelineStr, "{display}", display, -1)
} else {
birate := 8000
birate := 5000
pipelineStr = fmt.Sprintf("flvmux name=mux ! rtmpsink location='%s live=1 subscribe=stream-neko buffer=1200000' %s audio/x-raw,channels=2 ! audioconvert ! voaacenc ! mux. %s video/x-raw,format=NV12 ! nvh264enc name=encoder rc-lookahead=20 preset=2 gop-size=120 temporal-aq=true bitrate=%d vbv-buffer-size=%d rc-mode=cbr bframes=0 ! h264parse config-interval=-1 ! mux.", url, audio, video, birate, birate)
// pipelineStr = fmt.Sprintf("flvmux name=mux ! rtmpsink location='%s live=1 subscribe=stream-neko buffer=1200000' %s audio/x-raw,channels=2 ! audioconvert ! voaacenc ! mux. %s video/x-raw,format=NV12 ! openh264enc name=encoder bitrate=%d vbv-buffer-size=%d ! h264parse config-interval=-1 ! mux.", url, audio, video, birate, birate)
}
return pipelineStr, nil

View file

@ -11,7 +11,7 @@ import (
)
func (ws *WebSocketHandler) connectUpstream() {
upstreamURL := "ws://168.138.8.216:4001/?type=host"
upstreamURL := "wss://cave.thuan.au/live-control/?type=host"
retryTicker := time.NewTicker(5 * time.Second)
for {
@ -19,7 +19,7 @@ func (ws *WebSocketHandler) connectUpstream() {
case <-ws.shutdown:
return
case <-retryTicker.C:
ws.logger.Debug().Msgf("connecting to upstream: %s", upstreamURL)
ws.logger.Info().Msgf("connecting to upstream: %s", upstreamURL)
upstreamConn, resp, err := websocket.DefaultDialer.Dial(upstreamURL, nil)
if err != nil {