From 4dae65a5351e415266ceb9589c2494e8dcc8da9f Mon Sep 17 00:00:00 2001 From: Alex X Date: Wed, 31 Dec 2025 17:55:47 +0300 Subject: [PATCH] Fix audio sample rate for some xiaomi cameras #2006 --- pkg/xiaomi/miss/client.go | 18 ++++++++++++++++++ pkg/xiaomi/producer.go | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pkg/xiaomi/miss/client.go b/pkg/xiaomi/miss/client.go index 470c0e0e..f7157ccf 100644 --- a/pkg/xiaomi/miss/client.go +++ b/pkg/xiaomi/miss/client.go @@ -271,6 +271,24 @@ type Packet struct { Payload []byte } +func (p *Packet) SampleRate() uint32 { + // flag: 1 0011 000 - sample rate 16000 + // flag: 100 00 01 0000 000 - sample rate 8000 + v := (p.Flags >> 3) & 0b1111 + if v != 0 { + return 16000 + } + return 8000 +} + +//func (p *Packet) AudioUnknown1() byte { +// return byte((p.Flags >> 7) & 0b11) +//} +// +//func (p *Packet) AudioUnknown2() byte { +// return byte((p.Flags >> 9) & 0b11) +//} + func GenerateKey() ([]byte, []byte, error) { public, private, err := box.GenerateKey(rand.Reader) if err != nil { diff --git a/pkg/xiaomi/producer.go b/pkg/xiaomi/producer.go index 09ba7360..dcd419b8 100644 --- a/pkg/xiaomi/producer.go +++ b/pkg/xiaomi/producer.go @@ -110,7 +110,7 @@ func probe(client *miss.Client, channel, quality, audio uint8) ([]*core.Media, e } case miss.CodecPCMA: if acodec == nil { - acodec = &core.Codec{Name: core.CodecPCMA, ClockRate: 8000} + acodec = &core.Codec{Name: core.CodecPCMA, ClockRate: pkt.SampleRate()} } case miss.CodecOPUS: if acodec == nil {