Add support MJPEG codec for HomeKit cameras

This commit is contained in:
Alexey Khit
2023-07-23 22:35:53 +03:00
parent a14c87ad60
commit 0f33ef0fc5
+35
View File
@@ -14,6 +14,7 @@ import (
"github.com/AlexxIT/go2rtc/pkg/hap"
"github.com/AlexxIT/go2rtc/pkg/hap/camera"
"github.com/AlexxIT/go2rtc/pkg/srtp"
"github.com/pion/rtp"
)
type Client struct {
@@ -180,6 +181,19 @@ func (c *Client) GetMedias() []*core.Media {
}
}
media := &core.Media{
Kind: core.KindVideo,
Direction: core.DirectionRecvonly,
Codecs: []*core.Codec{
{
Name: core.CodecJPEG,
ClockRate: 90000,
PayloadType: core.PayloadTypeRAW,
},
},
}
c.medias = append(c.medias, media)
return c.medias
}
@@ -200,6 +214,10 @@ func (c *Client) Start() error {
return errors.New("producer without tracks")
}
if c.receivers[0].Codec.Name == core.CodecJPEG {
return c.startMJPEG()
}
// get our server local IP-address
host, _, err := net.SplitHostPort(c.conn.LocalAddr())
if err != nil {
@@ -369,3 +387,20 @@ func (c *Client) trackByKind(kind string) *core.Receiver {
}
return nil
}
func (c *Client) startMJPEG() error {
receiver := c.receivers[0]
for {
b, err := c.conn.GetImage(1920, 1080)
if err != nil {
return err
}
packet := &rtp.Packet{
Header: rtp.Header{Timestamp: core.Now90000()},
Payload: b,
}
receiver.WriteRTP(packet)
}
}