Adds error handler for mp4 init
This commit is contained in:
+14
-5
@@ -48,13 +48,17 @@ func handlerKeyframe(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defer stream.RemoveConsumer(cons)
|
||||||
|
|
||||||
w.Header().Set("Content-Type", cons.MimeType())
|
w.Header().Set("Content-Type", cons.MimeType())
|
||||||
|
|
||||||
data := cons.Init()
|
data, err := cons.Init()
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Msg("[api.keyframe] init")
|
||||||
|
return
|
||||||
|
}
|
||||||
data = append(data, <-exit...)
|
data = append(data, <-exit...)
|
||||||
|
|
||||||
stream.RemoveConsumer(cons)
|
|
||||||
|
|
||||||
// Apple Safari won't show frame without length
|
// Apple Safari won't show frame without length
|
||||||
w.Header().Set("Content-Length", strconv.Itoa(len(data)))
|
w.Header().Set("Content-Length", strconv.Itoa(len(data)))
|
||||||
|
|
||||||
@@ -97,8 +101,13 @@ func handlerMP4(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
w.Header().Set("Content-Type", cons.MimeType())
|
w.Header().Set("Content-Type", cons.MimeType())
|
||||||
|
|
||||||
data := cons.Init()
|
data, err := cons.Init()
|
||||||
if _, err := w.Write(data); err != nil {
|
if err != nil {
|
||||||
|
log.Error().Err(err).Msg("[api.mp4] init")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err = w.Write(data); err != nil {
|
||||||
log.Error().Err(err).Msg("[api.mp4] write")
|
log.Error().Err(err).Msg("[api.mp4] write")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-1
@@ -41,5 +41,12 @@ func handlerWS(ctx *api.Context, msg *streamer.Message) {
|
|||||||
Type: MsgTypeMSE, Value: cons.MimeType(),
|
Type: MsgTypeMSE, Value: cons.MimeType(),
|
||||||
})
|
})
|
||||||
|
|
||||||
ctx.Write(cons.Init())
|
data, err := cons.Init()
|
||||||
|
if err != nil {
|
||||||
|
log.Warn().Err(err).Msg("[api.mse] init")
|
||||||
|
ctx.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Write(data)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -86,7 +86,7 @@ func (c *Consumer) MimeType() string {
|
|||||||
return c.muxer.MimeType(c.codecs)
|
return c.muxer.MimeType(c.codecs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Consumer) Init() []byte {
|
func (c *Consumer) Init() ([]byte, error) {
|
||||||
if c.muxer == nil {
|
if c.muxer == nil {
|
||||||
c.muxer = &Muxer{}
|
c.muxer = &Muxer{}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-3
@@ -2,6 +2,7 @@ package mp4
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
"github.com/AlexxIT/go2rtc/pkg/h264"
|
"github.com/AlexxIT/go2rtc/pkg/h264"
|
||||||
"github.com/AlexxIT/go2rtc/pkg/streamer"
|
"github.com/AlexxIT/go2rtc/pkg/streamer"
|
||||||
"github.com/deepch/vdk/codec/h264parser"
|
"github.com/deepch/vdk/codec/h264parser"
|
||||||
@@ -32,18 +33,21 @@ func (m *Muxer) MimeType(codecs []*streamer.Codec) string {
|
|||||||
return s + `"`
|
return s + `"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Muxer) GetInit(codecs []*streamer.Codec) []byte {
|
func (m *Muxer) GetInit(codecs []*streamer.Codec) ([]byte, error) {
|
||||||
moov := MOOV()
|
moov := MOOV()
|
||||||
|
|
||||||
for _, codec := range codecs {
|
for _, codec := range codecs {
|
||||||
switch codec.Name {
|
switch codec.Name {
|
||||||
case streamer.CodecH264:
|
case streamer.CodecH264:
|
||||||
sps, pps := h264.GetParameterSet(codec.FmtpLine)
|
sps, pps := h264.GetParameterSet(codec.FmtpLine)
|
||||||
|
if sps == nil {
|
||||||
|
return nil, fmt.Errorf("empty SPS: %#v", codec)
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: remove
|
// TODO: remove
|
||||||
codecData, err := h264parser.NewCodecDataFromSPSAndPPS(sps, pps)
|
codecData, err := h264parser.NewCodecDataFromSPSAndPPS(sps, pps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
width := codecData.Width()
|
width := codecData.Width()
|
||||||
@@ -83,7 +87,7 @@ func (m *Muxer) GetInit(codecs []*streamer.Codec) []byte {
|
|||||||
data := make([]byte, moov.Len())
|
data := make([]byte, moov.Len())
|
||||||
moov.Marshal(data)
|
moov.Marshal(data)
|
||||||
|
|
||||||
return append(FTYP(), data...)
|
return append(FTYP(), data...), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Muxer) Rewind() {
|
func (m *Muxer) Rewind() {
|
||||||
|
|||||||
Reference in New Issue
Block a user