Files
go2rtc/pkg/multipart/producer.go
2023-08-28 22:43:07 +03:00

69 lines
1.1 KiB
Go

package multipart
import (
"bufio"
"errors"
"io"
"github.com/AlexxIT/go2rtc/pkg/core"
"github.com/pion/rtp"
)
type Producer struct {
core.SuperProducer
closer io.Closer
reader *bufio.Reader
}
func Open(rd io.Reader) (*Producer, error) {
prod := &Producer{
closer: rd.(io.Closer),
reader: bufio.NewReader(rd),
}
prod.Medias = []*core.Media{
{
Kind: core.KindVideo,
Direction: core.DirectionRecvonly,
Codecs: []*core.Codec{
{
Name: core.CodecJPEG,
ClockRate: 90000,
PayloadType: core.PayloadTypeRAW,
},
},
},
}
prod.Type = "Multipart producer"
return prod, nil
}
func (c *Producer) Start() error {
if len(c.Receivers) != 1 {
return errors.New("mjpeg: no receivers")
}
mjpeg := c.Receivers[0]
for {
_, body, err := Next(c.reader)
if err != nil {
return err
}
c.Recv += len(body)
if mjpeg != nil {
packet := &rtp.Packet{
Header: rtp.Header{Timestamp: core.Now90000()},
Payload: body,
}
mjpeg.WriteRTP(packet)
}
}
}
func (c *Producer) Stop() error {
_ = c.SuperProducer.Close()
return c.closer.Close()
}