Files
go2rtc/pkg
Sergey Krashevich 1856b7ace4 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
2026-03-05 06:26:06 +03:00
..
2026-01-01 05:24:45 +01:00
2025-04-04 19:58:05 +03:00
2024-08-04 10:18:24 +03:00
2026-01-13 12:15:48 +03:00
2025-10-05 16:00:58 +03:00
2024-08-04 10:18:24 +03:00
2025-12-13 14:00:16 +03:00
2026-02-06 21:45:55 +03:00
2025-04-04 19:59:52 +03:00
2025-11-19 12:58:23 +03:00
2024-06-16 06:20:45 +03:00
2026-02-08 08:50:18 +03:00
2026-02-08 08:50:18 +03:00
2025-04-07 16:56:38 +03:00
2024-06-16 06:20:45 +03:00
2024-06-16 06:20:45 +03:00
2025-04-21 20:17:52 +03:00
2024-06-16 06:20:45 +03:00
2025-07-10 16:09:18 +02:00
2025-04-04 19:58:05 +03:00
2024-08-04 10:18:24 +03:00
2025-03-09 17:26:06 +03:00
2025-03-09 17:26:06 +03:00
2025-07-10 16:09:18 +02:00
2023-03-19 17:17:05 +03:00
2025-03-09 17:26:06 +03:00
2025-10-04 19:18:36 +03:00
2025-05-21 13:16:49 +02:00
2025-04-07 16:56:38 +03:00
2025-10-07 15:15:04 +03:00
2025-04-07 16:56:38 +03:00
2025-11-20 20:03:34 +03:00
2025-03-07 21:44:23 +03:00
2025-06-12 16:52:05 +03:00
2026-02-08 08:50:18 +03:00

Notes

go2rtc tries to name formats, protocols and codecs the same way they are named in FFmpeg. Some formats and protocols go2rtc supports exclusively. They have no equivalent in FFmpeg.

Producers (input)

  • The initiator of the connection can be go2rtc - Source protocols
  • The initiator of the connection can be an external program - Ingress protocols
  • Codecs can be incoming - Receiver codecs
  • Codecs can be outgoing (two way audio) - Sender codecs
Group Format Protocols Ingress Receiver codecs Sender codecs Example
Devices alsa pipe pcm alsa:
Devices v4l2 pipe v4l2:
Files adts http, tcp, pipe http aac http:
Files flv http, tcp, pipe http h264, aac http:
Files h264 http, tcp, pipe http h264 http:
Files hevc http, tcp, pipe http hevc http:
Files hls http h264, h265, aac, opus http:
Files mjpeg http, tcp, pipe http mjpeg http:
Files mpegts http, tcp, pipe http h264, hevc, aac, opus http:
Files wav http, tcp, pipe http pcm_alaw, pcm_mulaw http:
Net (pub) mpjpeg http, tcp, pipe http mjpeg http:
Net (pub) onvif rtsp onvif:
Net (pub) rtmp rtmp rtmp h264, aac rtmp:
Net (pub) rtsp rtsp, ws rtsp h264, hevc, aac, pcm*, opus pcm*, opus rtsp:
Net (pub) webrtc* webrtc webrtc h264, pcm_alaw, pcm_mulaw, opus pcm_alaw, pcm_mulaw webrtc:
Net (pub) yuv4mpegpipe http, tcp, pipe http rawvideo http:
Net (priv) bubble http h264, hevc, pcm_alaw bubble:
Net (priv) doorbird http doorbird:
Net (priv) dvrip tcp h264, hevc, pcm_alaw, pcm_mulaw pcm_alaw dvrip:
Net (priv) eseecloud http eseecloud:
Net (priv) gopro udp TODO gopro:
Net (priv) hass webrtc TODO hass:
Net (priv) homekit hap h264, eld* homekit:
Net (priv) isapi http pcm_alaw, pcm_mulaw isapi:
Net (priv) kasa http h264, pcm_mulaw kasa:
Net (priv) nest rtsp, webrtc TODO nest:
Net (priv) ring webrtc ring:
Net (priv) roborock webrtc h264, opus opus roborock:
Net (priv) tapo http h264, pcma pcm_alaw tapo:
Net (priv) tuya webrtc tuya:
Net (priv) vigi http vigi:
Net (priv) webtorrent webrtc TODO TODO TODO webtorrent:
Net (priv) xiaomi* cs2, tutk xiaomi:
Services flussonic ws flussonic:
Services ivideon ws h264 ivideon:
Services yandex webrtc yandex:
Other echo * echo:
Other exec pipe, rtsp exec:
Other expr * expr:
Other ffmpeg pipe, rtsp ffmpeg:
Other stdin pipe pcm_alaw, pcm_mulaw stdin:
  • eld - rare variant of aac codec
  • pcm - pcm_alaw pcm_mulaw pcm_s16be pcm_s16le
  • webrtc - webrtc/kinesis, webrtc/openipc, webrtc/milestone, webrtc/wyze, webrtc/whep

Consumers (output)

Format Protocol Send codecs Recv codecs Example
adts http aac GET /api/stream.adts
ascii http mjpeg GET /api/stream.ascii
flv http h264, aac GET /api/stream.flv
hls/mpegts http h264, hevc, aac GET /api/stream.m3u8
hls/fmp4 http h264, hevc, aac, pcm*, opus GET /api/stream.m3u8?mp4
homekit hap h264, opus Apple HomeKit app
mjpeg ws mjpeg {"type":"mjpeg"} -> /api/ws
mpjpeg http mjpeg GET /api/stream.mjpeg
mp4 http h264, hevc, aac, pcm*, opus GET /api/stream.mp4
mse/fmp4 ws h264, hevc, aac, pcm*, opus {"type":"mse"} -> /api/ws
mpegts http h264, hevc, aac GET /api/stream.ts
rtmp rtmp h264, aac rtmp://localhost:1935/{stream_name}
rtsp rtsp h264, hevc, aac, pcm*, opus rtsp://localhost:8554/{stream_name}
webrtc webrtc h264, pcm_alaw, pcm_mulaw, opus pcm_alaw, pcm_mulaw, opus {"type":"webrtc"} -> /api/ws
yuv4mpegpipe http rawvideo GET /api/stream.y4m
  • pcm - pcm_alaw pcm_mulaw pcm_s16be pcm_s16le

Snapshots

Format Protocol Send codecs Example
jpeg http mjpeg GET /api/frame.jpeg
mp4 http h264,hevc GET /api/frame.mp4

Developers

File naming:

  • pkg/{format}/producer.go - producer for this format (also if support backchannel)
  • pkg/{format}/consumer.go - consumer for this format
  • pkg/{format}/backchannel.go - producer with only backchannel func

Mentioning modules: