Files
go2rtc/pkg/magic/magic.go
T
2023-08-16 20:13:42 +03:00

41 lines
838 B
Go

package magic
import (
"bytes"
"encoding/hex"
"errors"
"io"
"github.com/AlexxIT/go2rtc/pkg/core"
"github.com/AlexxIT/go2rtc/pkg/flv"
"github.com/AlexxIT/go2rtc/pkg/h264/annexb"
"github.com/AlexxIT/go2rtc/pkg/magic/bitstream"
"github.com/AlexxIT/go2rtc/pkg/magic/mjpeg"
"github.com/AlexxIT/go2rtc/pkg/mpegts"
)
func Open(r io.Reader) (core.Producer, error) {
rd := core.NewReadSeeker(r)
b, err := rd.Peek(4)
if err != nil {
return nil, err
}
switch {
case bytes.HasPrefix(b, []byte(annexb.StartCode)):
return bitstream.Open(rd)
case bytes.HasPrefix(b, []byte{0xFF, 0xD8}):
return mjpeg.NewClient(rd), nil
case bytes.HasPrefix(b, []byte(flv.Signature)):
return flv.Open(rd)
case b[0] == mpegts.SyncByte:
break // TODO
}
return nil, errors.New("magic: unsupported header: " + hex.EncodeToString(b))
}