feat(homekit): add Speaker service and enhance Consumer with backtrack audio handling

This commit is contained in:
Sergey Krashevich
2026-03-06 09:07:26 +03:00
parent 78ef8fc064
commit 593dce6eb9
2 changed files with 46 additions and 0 deletions
+29
View File
@@ -26,6 +26,8 @@ type Consumer struct {
videoSession *srtp.Session
audioSession *srtp.Session
audioRTPTime byte
backTrack *core.Receiver // backchannel audio (HomeKit viewer → camera)
}
func NewConsumer(conn net.Conn, server *srtp.Server) *Consumer {
@@ -44,6 +46,13 @@ func NewConsumer(conn net.Conn, server *srtp.Server) *Consumer {
{Name: core.CodecOpus},
},
},
{
Kind: core.KindAudio,
Direction: core.DirectionRecvonly,
Codecs: []*core.Codec{
{Name: core.CodecOpus},
},
},
}
return &Consumer{
Connection: core.Connection{
@@ -130,6 +139,26 @@ func (c *Consumer) SetConfig(conf *camera.SelectedStreamConfiguration) bool {
return true
}
func (c *Consumer) GetTrack(media *core.Media, codec *core.Codec) (*core.Receiver, error) {
if codec.Kind() != core.KindAudio {
return nil, core.ErrCantGetTrack
}
c.backTrack = core.NewReceiver(media, codec)
c.audioSession.OnReadRTP = func(packet *rtp.Packet) {
c.backTrack.WriteRTP(packet)
c.Recv += len(packet.Payload)
}
c.Receivers = append(c.Receivers, c.backTrack)
return c.backTrack, nil
}
func (c *Consumer) Start() error {
return nil
}
func (c *Consumer) AddTrack(media *core.Media, codec *core.Codec, track *core.Receiver) error {
var session *srtp.Session
if codec.Kind() == core.KindVideo {