From 0f33ef0fc594e844b3d9d3de14891e5190e52c95 Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Sun, 23 Jul 2023 22:35:53 +0300 Subject: [PATCH] Add support MJPEG codec for HomeKit cameras --- pkg/homekit/client.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/pkg/homekit/client.go b/pkg/homekit/client.go index f0769a39..9d4a3bfa 100644 --- a/pkg/homekit/client.go +++ b/pkg/homekit/client.go @@ -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) + } +}