Fix upstream not working if there is an error

This commit is contained in:
John Nguyen 2023-05-07 16:18:39 +10:00
parent 2b3d945281
commit f7128e8a87
2 changed files with 4 additions and 13 deletions

View file

@ -47,7 +47,7 @@ func NewBroadcastPipeline(device string, display string, pipelineSrc string, url
// replace display // replace display
pipelineStr = strings.Replace(pipelineStr, "{display}", display, -1) pipelineStr = strings.Replace(pipelineStr, "{display}", display, -1)
} else { } else {
pipelineStr = fmt.Sprintf("flvmux name=mux ! rtmpsink location='%s live=1' %s audio/x-raw,channels=2 ! audioconvert ! voaacenc ! mux. %s video/x-raw,format=NV12 ! x264enc bitrate=%d bframes=0 key-int-max=60 byte-stream=true tune=zerolatency speed-preset=veryfast ! mux.", url, audio, video, 6000) pipelineStr = fmt.Sprintf("flvmux name=mux ! rtmpsink location='%s live=1' %s audio/x-raw,channels=2 ! audioconvert ! voaacenc ! mux. %s video/x-raw,format=NV12 ! x264enc bitrate=%d bframes=0 key-int-max=60 byte-stream=true tune=zerolatency speed-preset=veryfast ! mux.", url, audio, video, 8000)
} }
return pipelineStr, nil return pipelineStr, nil

View file

@ -48,9 +48,6 @@ type Client struct {
} }
func (c *Client) readPump() { func (c *Client) readPump() {
defer func() {
c.hub.unregister <- c
}()
c.conn.SetReadLimit(maxMessageSize) c.conn.SetReadLimit(maxMessageSize)
c.conn.SetReadDeadline(time.Now().Add(pongWait)) c.conn.SetReadDeadline(time.Now().Add(pongWait))
c.conn.SetPongHandler(func(string) error { c.conn.SetPongHandler(func(string) error {
@ -64,8 +61,7 @@ func (c *Client) readPump() {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) { if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
log.Printf("error: %v", err) log.Printf("error: %v", err)
} }
c.hub.unregister <- c return
break
} }
c.hub.broadcast <- raw c.hub.broadcast <- raw
} }
@ -77,18 +73,13 @@ func (c *Client) writePump() {
ticker.Stop() ticker.Stop()
c.hub.unregister <- c c.hub.unregister <- c
close(c.send) close(c.send)
c.conn.Close()
}() }()
for { for {
select { select {
case raw, ok := <-c.send: case raw := <-c.send:
c.conn.SetWriteDeadline(time.Now().Add(writeWait)) c.conn.SetWriteDeadline(time.Now().Add(writeWait))
if !ok {
// The hub closed the channel.
c.conn.WriteMessage(websocket.CloseMessage, []byte{})
c.conn.Close()
return
}
if err := c.conn.WriteMessage(websocket.BinaryMessage, raw); err != nil { if err := c.conn.WriteMessage(websocket.BinaryMessage, raw); err != nil {
log.Printf("Error writing message: %v", err) log.Printf("Error writing message: %v", err)