fix(homekit): fix HKSV recording by correcting HDS protocol and adding GOP buffering
The HKSV recording was failing because: 1. The dataSend.data message structure was wrong - `packets` was a flat integer instead of an array of objects with `data` and `metadata` fields matching the HAP-NodeJS specification 2. Each video/audio frame was sent as a separate mediaFragment, but Home Hub expects GOP-based fragments (~2-4 seconds of accumulated data) 3. Large fragments were not chunked (max 256 KiB per chunk) Changes: - Fix HDS dataSend.data message structure to use proper packets array with nested data/metadata (dataType, dataSequenceNumber, dataChunkSequenceNumber, isLastDataChunk, dataTotalSize) - Add 256 KiB chunking for large media fragments - Buffer moof+mdat pairs in hksvConsumer and flush on keyframe boundaries (GOP-based fragmentation) - Pre-start consumer at pair-verify for instant init segment delivery - Add write-response support to HAP PUT handler for ch131 DataStream setup - Fix HAP service linking to match HAP-NodeJS reference - Add default SelectedCameraRecordingConfiguration (ch209) value - Start continuous motion generator at pair-verify with dedup protection
This commit is contained in:
@@ -40,10 +40,8 @@ func NewHKSVAccessory(manuf, model, name, serial, firmware string) *hap.Accessor
|
||||
}
|
||||
acc.InitIID()
|
||||
|
||||
// CameraOperatingMode links to RTPStreamManagement and RecordingManagement
|
||||
operatingMode.Linked = []int{int(rtpStream.IID), int(recordingMgmt.IID)}
|
||||
// CameraEventRecordingManagement links to DataStreamManagement and MotionSensor
|
||||
recordingMgmt.Linked = []int{int(dataStreamMgmt.IID), int(motionSensor.IID)}
|
||||
// HAP-NodeJS: only RecordingManagement links to DataStreamManagement
|
||||
recordingMgmt.Linked = []int{int(dataStreamMgmt.IID)}
|
||||
|
||||
return acc
|
||||
}
|
||||
@@ -71,10 +69,8 @@ func NewHKSVDoorbellAccessory(manuf, model, name, serial, firmware string) *hap.
|
||||
}
|
||||
acc.InitIID()
|
||||
|
||||
// CameraOperatingMode links to RTPStreamManagement and RecordingManagement
|
||||
operatingMode.Linked = []int{int(rtpStream.IID), int(recordingMgmt.IID)}
|
||||
// CameraEventRecordingManagement links to DataStreamManagement, MotionSensor, and Doorbell
|
||||
recordingMgmt.Linked = []int{int(dataStreamMgmt.IID), int(motionSensor.IID), int(doorbell.IID)}
|
||||
// HAP-NodeJS: only RecordingManagement links to DataStreamManagement
|
||||
recordingMgmt.Linked = []int{int(dataStreamMgmt.IID)}
|
||||
|
||||
return acc
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user