Fix mpegts reader for tapo client

This commit is contained in:
Alexey Khit
2023-08-17 07:13:41 +03:00
parent dd066ba040
commit 42f6441512
2 changed files with 14 additions and 24 deletions
-15
View File
@@ -295,18 +295,3 @@ func (r *Reader) left() byte {
func (r *Reader) setSize(size byte) { func (r *Reader) setSize(size byte) {
r.end = r.pos + size 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) {
}
+14 -9
View File
@@ -8,14 +8,16 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/AlexxIT/go2rtc/pkg/core" "io"
"github.com/AlexxIT/go2rtc/pkg/mpegts"
"github.com/AlexxIT/go2rtc/pkg/tcp"
"mime/multipart" "mime/multipart"
"net" "net"
"net/http" "net/http"
"net/url" "net/url"
"strconv" "strconv"
"github.com/AlexxIT/go2rtc/pkg/core"
"github.com/AlexxIT/go2rtc/pkg/mpegts"
"github.com/AlexxIT/go2rtc/pkg/tcp"
) )
type Client struct { type Client struct {
@@ -143,11 +145,11 @@ func (c *Client) SetupStream() (err error) {
// Handle - first run will be in probe state // Handle - first run will be in probe state
func (c *Client) Handle() error { func (c *Client) Handle() error {
mpReader := multipart.NewReader(c.conn1, "--device-stream-boundary--") multipartRd := multipart.NewReader(c.conn1, "--device-stream-boundary--")
tsReader := mpegts.NewReader() mpegtsRd := mpegts.NewReader()
for { for {
p, err := mpReader.NextRawPart() p, err := multipartRd.NextRawPart()
if err != nil { if err != nil {
return err return err
} }
@@ -176,13 +178,16 @@ func (c *Client) Handle() error {
} }
body = c.decrypt(body) body = c.decrypt(body)
tsReader.SetBuffer(body) bytesRd := bytes.NewReader(body)
for { for {
pkt := tsReader.GetPacket() pkt, err2 := mpegtsRd.ReadPacket(bytesRd)
if pkt == nil { if pkt == nil || err2 == io.EOF {
break break
} }
if err2 != nil {
return err2
}
for _, receiver := range c.receivers { for _, receiver := range c.receivers {
if receiver.ID == pkt.PayloadType { if receiver.ID == pkt.PayloadType {