Rewrite magic client

This commit is contained in:
Alexey Khit
2023-08-16 20:13:42 +03:00
parent c3ba8db660
commit 4a82eb3503
4 changed files with 10 additions and 53 deletions
-9
View File
@@ -9,7 +9,6 @@ import (
"github.com/AlexxIT/go2rtc/internal/streams" "github.com/AlexxIT/go2rtc/internal/streams"
"github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/core"
"github.com/AlexxIT/go2rtc/pkg/flv"
"github.com/AlexxIT/go2rtc/pkg/magic" "github.com/AlexxIT/go2rtc/pkg/magic"
"github.com/AlexxIT/go2rtc/pkg/mjpeg" "github.com/AlexxIT/go2rtc/pkg/mjpeg"
"github.com/AlexxIT/go2rtc/pkg/multipart" "github.com/AlexxIT/go2rtc/pkg/multipart"
@@ -52,14 +51,6 @@ func handleHTTP(url string) (core.Producer, error) {
case "multipart/x-mixed-replace": case "multipart/x-mixed-replace":
return multipart.NewClient(res) return multipart.NewClient(res)
case "video/x-flv":
client, err := flv.Open(res.Body)
if err != nil {
return nil, err
}
client.URL = url
return client, nil
default: // "video/mpeg": default: // "video/mpeg":
} }
+3 -1
View File
@@ -13,6 +13,8 @@ import (
"github.com/pion/rtp" "github.com/pion/rtp"
) )
const Signature = "FLV"
type Client struct { type Client struct {
URL string URL string
@@ -178,7 +180,7 @@ func (c *Client) readHeader() error {
return err return err
} }
if string(b[:3]) != "FLV" { if string(b[:3]) != Signature {
return errors.New("flv: wrong header") return errors.New("flv: wrong header")
} }
+7 -16
View File
@@ -7,19 +7,14 @@ import (
"io" "io"
"github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/core"
"github.com/AlexxIT/go2rtc/pkg/flv"
"github.com/AlexxIT/go2rtc/pkg/h264/annexb" "github.com/AlexxIT/go2rtc/pkg/h264/annexb"
"github.com/AlexxIT/go2rtc/pkg/magic/bitstream" "github.com/AlexxIT/go2rtc/pkg/magic/bitstream"
"github.com/AlexxIT/go2rtc/pkg/magic/mjpeg" "github.com/AlexxIT/go2rtc/pkg/magic/mjpeg"
"github.com/AlexxIT/go2rtc/pkg/mpegts" "github.com/AlexxIT/go2rtc/pkg/mpegts"
) )
// Client - can read unknown bytestream and autodetect format func Open(r io.Reader) (core.Producer, error) {
type Client struct {
rd *core.ReadSeeker
prod core.Producer
}
func Open(r io.Reader) (*Client, error) {
rd := core.NewReadSeeker(r) rd := core.NewReadSeeker(r)
b, err := rd.Peek(4) b, err := rd.Peek(4)
@@ -28,18 +23,14 @@ func Open(r io.Reader) (*Client, error) {
} }
switch { switch {
case bytes.HasPrefix(b, []byte(annexb.StartCode)) || bytes.HasPrefix(b, []byte{0, 0, 1}): case bytes.HasPrefix(b, []byte(annexb.StartCode)):
var prod core.Producer return bitstream.Open(rd)
if prod, err = bitstream.Open(rd); err != nil {
return nil, err
}
return &Client{rd: rd, prod: prod}, nil
case bytes.HasPrefix(b, []byte{0xFF, 0xD8}): case bytes.HasPrefix(b, []byte{0xFF, 0xD8}):
return &Client{rd: rd, prod: mjpeg.NewClient(rd)}, nil return mjpeg.NewClient(rd), nil
case bytes.HasPrefix(b, []byte{'F', 'L', 'V'}): case bytes.HasPrefix(b, []byte(flv.Signature)):
break // TODO return flv.Open(rd)
case b[0] == mpegts.SyncByte: case b[0] == mpegts.SyncByte:
break // TODO break // TODO
-27
View File
@@ -1,27 +0,0 @@
package magic
import (
"encoding/json"
"github.com/AlexxIT/go2rtc/pkg/core"
)
func (c *Client) GetMedias() []*core.Media {
return c.prod.GetMedias()
}
func (c *Client) GetTrack(media *core.Media, codec *core.Codec) (*core.Receiver, error) {
return c.prod.GetTrack(media, codec)
}
func (c *Client) Start() error {
return c.prod.Start()
}
func (c *Client) Stop() (err error) {
return c.prod.Stop()
}
func (c *Client) MarshalJSON() ([]byte, error) {
return json.Marshal(c.prod)
}