From 42f6441512394c28c29356b232990919455a6251 Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Thu, 17 Aug 2023 07:13:41 +0300 Subject: [PATCH] Fix mpegts reader for tapo client --- pkg/mpegts/reader.go | 15 --------------- pkg/tapo/client.go | 23 ++++++++++++++--------- 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/pkg/mpegts/reader.go b/pkg/mpegts/reader.go index b3af17d1..7cd2688e 100644 --- a/pkg/mpegts/reader.go +++ b/pkg/mpegts/reader.go @@ -295,18 +295,3 @@ func (r *Reader) left() byte { func (r *Reader) setSize(size byte) { r.end = r.pos + size } - -// Deprecated: -func (r *Reader) SetBuffer(b []byte) { - -} - -// Deprecated: -func (r *Reader) GetPacket() *rtp.Packet { - panic("") -} - -// Deprecated: -func (r *Reader) AppendBuffer(sniff []byte) { - -} diff --git a/pkg/tapo/client.go b/pkg/tapo/client.go index 29994734..15a39b6e 100644 --- a/pkg/tapo/client.go +++ b/pkg/tapo/client.go @@ -8,14 +8,16 @@ import ( "encoding/json" "errors" "fmt" - "github.com/AlexxIT/go2rtc/pkg/core" - "github.com/AlexxIT/go2rtc/pkg/mpegts" - "github.com/AlexxIT/go2rtc/pkg/tcp" + "io" "mime/multipart" "net" "net/http" "net/url" "strconv" + + "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/AlexxIT/go2rtc/pkg/mpegts" + "github.com/AlexxIT/go2rtc/pkg/tcp" ) type Client struct { @@ -143,11 +145,11 @@ func (c *Client) SetupStream() (err error) { // Handle - first run will be in probe state func (c *Client) Handle() error { - mpReader := multipart.NewReader(c.conn1, "--device-stream-boundary--") - tsReader := mpegts.NewReader() + multipartRd := multipart.NewReader(c.conn1, "--device-stream-boundary--") + mpegtsRd := mpegts.NewReader() for { - p, err := mpReader.NextRawPart() + p, err := multipartRd.NextRawPart() if err != nil { return err } @@ -176,13 +178,16 @@ func (c *Client) Handle() error { } body = c.decrypt(body) - tsReader.SetBuffer(body) + bytesRd := bytes.NewReader(body) for { - pkt := tsReader.GetPacket() - if pkt == nil { + pkt, err2 := mpegtsRd.ReadPacket(bytesRd) + if pkt == nil || err2 == io.EOF { break } + if err2 != nil { + return err2 + } for _, receiver := range c.receivers { if receiver.ID == pkt.PayloadType {