G100 RTSP over Frigate/Fregatta Not Reliable and HomeKit

G100 RTSP main stream (ch1) sends broken / keyframe-less H.264 — unusable in NVRs like Frigate, while HKSV and the app look perfect (likely firmware bug)

Posting this in case others are fighting the same thing, and hoping it gives the Aqara devs something specific to target. I spent several days assuming this was my Wi-Fi or my network. It wasn’t — and I can now isolate it down to the camera’s RTSP encoder.

Setup

Several Aqara G100 cameras (8x) feeding Frigate (running as Fregata on a Mac mini) over RTSP, alongside HomeKit Secure Video. HKSV and the Aqara app are flawless on every camera. But in Frigate, several cameras constantly flap between recording and unavailable, drop recordings, and miss person detections.

Each camera exposes ch1 (main, ~1080p), ch2 (720p), and ch3 (360p). RTSP enabled per-camera in the app (“RTSP LAN Preview”).

The symptom

On the affected cameras, the ch1 main RTSP stream stops emitting valid keyframes / SPS-PPS parameter sets. Any ffmpeg-based consumer (Frigate, go2rtc, raw ffprobe) floods:

[h264] non-existing PPS 0 referenced
[h264] decode_slice_header error
[h264] no frame!
[rtsp] Could not find codec parameters for stream 1 (Video: h264, none): unspecified size

It often can’t even determine the resolution. Frigate joins the stream, waits for a keyframe that comes extremely rarely or never, hits its ~20s no-frames watchdog, restarts, and flaps forever.

How I isolated it (this is the important part)

I pulled the stream with raw ffmpeg, completely bypassing Frigate, go2rtc, and my config — so there’s nothing left to blame but the camera and the network path:

ffmpeg -hide_banner -rtsp_transport tcp -i "rtsp://USER:PASS@CAMERA_IP:8554/ch1" -t 15 -f null -
  • On a broken camera, ch1 floods the PPS errors above and decodes ~0–9 frames in 15 seconds.
  • On a healthy G100, the same command on ch1 locks 1920x1080 and decodes ~300 frames cleanly.
  • On the exact same broken camera, ch2 (720p) locks 1280x720 instantly and decodes cleanly.

So it’s per-unit, per-channel: specific cameras whose ch1 encoder has gone into a bad state, while ch2 on those same cameras is fine, and ch1 on my other G100s is fine.

(Note: a short “non-existing PPS” burst at the very start is normal — ffmpeg joins mid-GOP and has to wait for the next keyframe. The bug is that the keyframe/parameter set then never reliably arrives. Let the command run the full 15s before judging.)

Key points for the devs

  • It is not signal. The affected cameras were pulling −20 dBm RSSI on a close AP and loading instantly in HomeKit and the Aqara app. A strong radio link carrying a broken H.264 bitstream is still broken.
  • It is stateful and sticky. A camera reboot does not fix it. Toggling RTSP off/on in the app does not fix it — and notably that toggle does not roll the RTSP username/password (the app says only a factory reset does that). Bumping ffmpeg -analyzeduration / -probesize also does nothing.
  • It degrades on its own. At least one of mine was healthy on ch1 one day and broken the next, with no setting change on my end. So something in firmware drops into a bad ch1 state and doesn’t recover. (If this correlates with a staggered OTA, that would explain a lot — see my question below.)
  • HKSV is completely unaffected, which is exactly why this hides. The camera “looks perfect” everywhere except a real continuous RTSP/NVR consumer, so it’s easy to misdiagnose as a network problem for days.

This isn’t just me, and isn’t just Frigate

Same fingerprint shows up across unrelated stacks, which points squarely at the camera firmware rather than any one integration:

  • go2rtc #1775 — a G100 owner reported ch1 flooding the identical non-existing PPS 0 referenced / no frame! errors in ffmpeg, while the same stream played fine in VLC and Scrypted. That detail suggests the video may still be encoding but the parameter-set signaling isn’t ffmpeg-consumable.
  • Frigate discussion #23041 — the sibling G410 doorbell, same PPS error flood, dropping offline until Frigate is restarted, while the Aqara app shows it working fine.
  • Aqara forum “Aqara g100 rtsp bug” — a user running three G100s into a Dahua recorder via RTSP reports the recorder stops recording after a while unless reloaded, while HomeKit and the app stay perfect. That’s the same symptom on dedicated NVR hardware, not a Mac and not Frigate.

Questions for the community / Aqara

  1. Is anyone else seeing G100 ch1 go keyframe-less in an NVR (Frigate, Blue Iris, Synology, Dahua, etc.) while HKSV / the app stay perfect?
  2. Does it correlate with a specific firmware version? I’ve noticed G100 OTA rolls out staggered (different cameras on different versions), and the recent 4.5.x line has been rocky. If the broken units share a firmware version and the healthy ones don’t, that’s a strong lead.
  3. Does a factory reset durably restore ch1 for you, or does the bad state come back?
  4. Does a specific ch1 bitrate / resolution setting trigger it?

My workaround for now

Point the NVR at ch2 (720p) instead of ch1. It decodes cleanly and is plenty for person detection, and I keep full-resolution recording via HKSV separately. But 720p shouldn’t be the only reliable option on a 2K camera — ch1 needs a firmware fix so it reliably emits keyframes / SPS-PPS on the RTSP main stream.

Happy to share full ffmpeg logs and exact firmware versions per camera if it helps track this down.

@AqaraOfficial

12 Likes

Hi there, I’ve forwarded this topic to the team and we’ll look into it shortly.

8 Likes

Very thorough analysis. Hopefully Aqara can address it.

4 Likes

Thank you! I’ve been doing a lot of troubleshooting and testing with Claude. I’m a bit of a smart home nerd haha. I just want this to work!!!. Testing a few more things and then I’ll post another follow-up.

1 Like

I have exactly the same issue. I’m glad you described it so clearly. I had already given up on my camera, so I really hope they can fix it through a firmware update.

1 Like

Exactly the same issue here! Spent ages moving AP’s and maximising coverage. My Tapo cams have all been rock solid but the G100’s are terrible right now! So sad as the form factor and FOV are perfect! Please, please fix this guys :slight_smile:

1 Like

I have the same problem. I hope the official team can fix it as soon as possible

1 Like

I tested this from my Blue Iris server using raw FFmpeg, completely bypassing Blue Iris.

The affected G100 is my Garage Gate camera at /ch1. It repeatedly produced:

non-existing PPS 0 referenced
no frame!

It eventually identified the stream as 1920×1080 at 20 fps, but then produced invalid/non-monotonic DTS errors and an RTSP CSeq expected error. The test decoded only 105 frames and took more than one minute to process a requested 15-second sample.

I then tested /ch2 on the same camera. It also showed startup PPS errors, but recovered and completed the 15-second test with 245 frames.

For comparison, I tested /ch1 on another G100 on the same network, from the same Windows machine, using the same FFmpeg build and command. That camera recovered quickly and decoded 291 frames in about 15 seconds at 1920×1080/20 fps.

This strongly suggests a per-camera or per-encoder-state problem with the affected G100’s main RTSP stream rather than Blue Iris, FFmpeg, or the network. The Aqara app and HomeKit continue to display the camera normally.

The affected camera also repeatedly drops and reconnects in Blue Iris, while the comparison G100 remains stable.

I can provide the sanitized FFmpeg logs and firmware versions if Aqara engineering would like them.

2 Likes

I’m seeing what appears to be a G100-specific RTSP concurrency issue on firmware 4.5.45_0004.

With Scrypted completely shut down, I tested ch1, ch2, and ch3 simultaneously through FFmpeg for three minutes. On all three of my G100 cameras, at least one stream failed with CSeq expected, 0 received, missing PPS/decode errors, corrupt frames, or stalled timestamps. The failing channel varied by camera. Two-channel use appears stable.

As a control, I ran the identical test on my G350. Ch1 and ch2 reached 3,600 frames at 20 fps, and ch3 reached 2,700 frames at 15 fps—exactly as expected.

This strongly suggests the problem is specific to the G100 when all three RTSP channels are active concurrently, rather than my network, Scrypted, or FFmpeg.

2 Likes

Hello, can we have an update on this please? I have 5 G100s and I’m going to have to return them and go to a different brand if this isn’t addressed. Very disappointed.

3 Likes

Hi, I’m having the same issues but with a Aqara G5.
see info below.

G5 Pro (PoE): same RTSP bitstream corruption as the G100 — per-channel ffmpeg results

Adding a data point from a G5 Pro (PoE), since this thread so far covers the G100
and G410. Same fingerprint, and I was able to isolate it per channel.

Firmware: 4.5.30_0008.0017

Setup

  • Aqara G5 Pro, PoE (wired), static IP
  • Frigate 0.17.2 running as a Home Assistant add-on
  • HomeKit Secure Video active on the same camera
  • RTSP enabled from the Aqara Home app

Symptom

Recordings written by Frigate are unplayable in browsers, intermittently. The Aqara
app and HKSV are flawless. Frigate’s own re-encoded preview clips play fine — only the
raw camera bitstream fails. Browser errors:

Chrome:  PIPELINE_ERROR_DECODE: Failed to send video packet for decoding:
         {timestamp=8099988 duration=50000 size=2215 is_key_frame=0 encrypted=0}

Firefox: void mozilla::AppleVTDecoder::OnDecodeError(OSStatus):
         OnDecodeError:ffffcd93          (= -12909, kVTVideoDecoderMalfunctionErr)

Frigate’s logs also showed the same errors reported earlier in this thread:

[h264] non-existing PPS 0 referenced
[h264] decode_slice_header error
[h264] no frame!

How I isolated it

Raw ffmpeg against the camera, bypassing Frigate and go2rtc entirely, forcing TCP so
the network cannot silently drop anything:

ffmpeg -hide_banner -rtsp_transport tcp -i "rtsp://USER:PASS@CAMERA_IP:8554/chN" -t 15 -f null -

Results — all four channels, 15 seconds each

Channel Resolution PPS flood at start Corrupt I-frames Video DTS Frames in 15s
ch1 2688x1520 none 1 OK 299
ch2 1920x1080 ~29x 2 non-monotonic 345
ch3 1280x720 none none OK 299
ch4 640x360 ~35x none non-monotonic 307

ch1 decodes a full 299 frames but hits a damaged keyframe:

[h264] error while decoding MB 61 59, bytestream -14
[h264] concealing 6036 DC, 6036 AC, 6036 MV errors in I frame
[vist#0:1/h264] corrupt decoded frame

ch2 is the worst: it needs ~29 rounds of non-existing PPS 0 referenced / no frame!
before it can decode at all, then hits two damaged keyframes (3697 and 1366 concealed
errors), and floods dozens of:

Application provided invalid, non monotonically increasing dts to muxer in stream 0

ch4 shows the same PPS flood and the same broken video timestamps, though without
visibly corrupt frames in this sample.

ch3 is completely clean — no PPS errors, no concealed errors, no corrupt frames,
correct timestamps, exactly 299 frames. The only warning was a single DTS hiccup on the
audio stream, which is harmless.

What this rules out

  • Not the network. The camera is wired PoE, and -rtsp_transport tcp guarantees
    complete, in-order delivery. Data cannot have been lost in transit — the corruption
    originates in the camera’s encoder.
  • Not Frigate, not go2rtc, not ffmpeg config. These are raw ffmpeg pulls straight
    from the camera with no NVR in the path.
  • Not H.265. All channels report h264 (Main).
  • Not the browser. Chrome and Firefox both fail, with errors that both point at a
    missing/damaged keyframe rather than at codec support.

Consistent with the existing reports

This matches what has already been described in this thread for the G100 and G410:
the higher-resolution channels degrade while a lower channel stays healthy, HKSV and
the app remain perfect, and only a continuous RTSP/NVR consumer exposes it. The
per-unit, per-channel pattern appears to hold on the G5 Pro too.

My workaround is the same as the one suggested here: point the NVR at the clean lower
channel (ch3, 720p) and accept the resolution loss.

Questions

  1. Has anyone with a G5 Pro run the same per-channel ffmpeg test? I’d be curious
    whether ch3 is reliably the healthy one, or whether it varies per unit as it seems
    to on the G100.
  2. Does a factory reset durably restore the affected channels? This was asked
    earlier in the thread and I don’t think it was ever answered. I’d rather not reset
    and re-pair everything if the bad state simply returns.
  3. Is this being tracked against a specific firmware line? Happy to supply full ffmpeg
    logs per channel if that helps.

@AqaraOfficial — the raw per-channel logs are available on request.

3 Likes

for my G100, factory reset does not fix the issue.

2 Likes

Thank you for the info. Hopefully Aqara will pick this back up and fix this in the next firmware for every affected camera type.

2 Likes

Same exact thing setup as @goossens_olivier and having identical issues. Any help from @AqaraOfficial here?

1 Like

@AqaraOffcial, please look into this. Thank you for a reply

1 Like

Welcome to the forum, @fen_tympani_0p

I’m having the same problem with the G410, and I think I’ve found a temporary solution.
go2rtc can accept HKSV and pass it on to a frigate.
Yeah, there’s a sound issue that hasn’t been resolved yet, but at least it works. I’m also really disappointed with the G410 and am looking for something else to replace it.

1 Like
streams:
  Doorbell_Rep: 
    - homekit://192.168.20.29:45457?device_id=92:xxxxxxx
  Doorbell_final:
  - rtsp://127.0.0.1:8554/Doorbell_Rep?video                     # only video from homekit
  - rtsp://user:123@192.168.20.29:8554/ch3#media=audio#backchannel=0   # only audio

2 Likes

Experiencing the same problem with a G100. I don’t have a control device, so I can’t confirm the per-device thesis.

1 Like

Similar problems with G400, ch3 unusable so I’m using ch2 for Record and Detect via a Go2rtc stream.