Fix support Aqara G2H #793
This commit is contained in:
+19
-14
@@ -2,6 +2,7 @@ package homekit
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"slices"
|
||||||
|
|
||||||
"github.com/AlexxIT/go2rtc/pkg/aac"
|
"github.com/AlexxIT/go2rtc/pkg/aac"
|
||||||
"github.com/AlexxIT/go2rtc/pkg/core"
|
"github.com/AlexxIT/go2rtc/pkg/core"
|
||||||
@@ -20,17 +21,16 @@ func videoToMedia(codecs []camera.VideoCodec) *core.Media {
|
|||||||
|
|
||||||
for _, codec := range codecs {
|
for _, codec := range codecs {
|
||||||
for _, param := range codec.CodecParams {
|
for _, param := range codec.CodecParams {
|
||||||
for _, profileID := range param.ProfileID {
|
// get best profile and level
|
||||||
for _, level := range param.Level {
|
profileID := slices.Max(param.ProfileID)
|
||||||
profile := videoProfiles[profileID] + videoLevels[level]
|
level := slices.Max(param.Level)
|
||||||
mediaCodec := &core.Codec{
|
profile := videoProfiles[profileID] + videoLevels[level]
|
||||||
Name: videoCodecs[codec.CodecType],
|
mediaCodec := &core.Codec{
|
||||||
ClockRate: 90000,
|
Name: videoCodecs[codec.CodecType],
|
||||||
FmtpLine: "profile-level-id=" + profile,
|
ClockRate: 90000,
|
||||||
}
|
FmtpLine: "profile-level-id=" + profile,
|
||||||
media.Codecs = append(media.Codecs, mediaCodec)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
media.Codecs = append(media.Codecs, mediaCodec)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ func audioToMedia(codecs []camera.AudioCodec) *core.Media {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if mediaCodec.Name == core.CodecELD {
|
if mediaCodec.Name == core.CodecELD {
|
||||||
// onli this version works with FFmpeg
|
// only this version works with FFmpeg
|
||||||
conf := aac.EncodeConfig(aac.TypeAACELD, 24000, 1, true)
|
conf := aac.EncodeConfig(aac.TypeAACELD, 24000, 1, true)
|
||||||
mediaCodec.FmtpLine = aac.FMTP + hex.EncodeToString(conf)
|
mediaCodec.FmtpLine = aac.FMTP + hex.EncodeToString(conf)
|
||||||
}
|
}
|
||||||
@@ -71,6 +71,7 @@ func audioToMedia(codecs []camera.AudioCodec) *core.Media {
|
|||||||
func trackToVideo(track *core.Receiver, video0 *camera.VideoCodec) *camera.VideoCodec {
|
func trackToVideo(track *core.Receiver, video0 *camera.VideoCodec) *camera.VideoCodec {
|
||||||
profileID := video0.CodecParams[0].ProfileID[0]
|
profileID := video0.CodecParams[0].ProfileID[0]
|
||||||
level := video0.CodecParams[0].Level[0]
|
level := video0.CodecParams[0].Level[0]
|
||||||
|
attrs := video0.VideoAttrs[0]
|
||||||
|
|
||||||
if track != nil {
|
if track != nil {
|
||||||
profile := h264.GetProfileLevelID(track.Codec.FmtpLine)
|
profile := h264.GetProfileLevelID(track.Codec.FmtpLine)
|
||||||
@@ -88,6 +89,12 @@ func trackToVideo(track *core.Receiver, video0 *camera.VideoCodec) *camera.Video
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, s := range video0.VideoAttrs {
|
||||||
|
if s.Width > attrs.Width || s.Height > attrs.Height {
|
||||||
|
attrs = s
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &camera.VideoCodec{
|
return &camera.VideoCodec{
|
||||||
@@ -98,9 +105,7 @@ func trackToVideo(track *core.Receiver, video0 *camera.VideoCodec) *camera.Video
|
|||||||
Level: []byte{level},
|
Level: []byte{level},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
VideoAttrs: []camera.VideoAttrs{
|
VideoAttrs: []camera.VideoAttrs{attrs},
|
||||||
{Width: 1920, Height: 1080, Framerate: 30},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,11 +55,8 @@ func proxy(r, w net.Conn, pair ServerPair) error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
//if n > 512 {
|
//log.Printf("[hap] %d bytes => %s\n%.512s", n, w.RemoteAddr(), b[:n])
|
||||||
// log.Printf("[hap] %d bytes => %s\n%s...", n, w.RemoteAddr(), b[:512])
|
|
||||||
//} else {
|
|
||||||
// log.Printf("[hap] %d bytes => %s\n%s", n, w.RemoteAddr(), b[:n])
|
|
||||||
//}
|
|
||||||
if _, err = w.Write(b[:n]); err != nil {
|
if _, err = w.Write(b[:n]); err != nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user