Skip to content

Explain Tesla 2026.20 clip encryption instead of a generic corrupt-file error#68

Merged
danielchalmers merged 2 commits into
mainfrom
encrypted-clip-detection
Jul 9, 2026
Merged

Explain Tesla 2026.20 clip encryption instead of a generic corrupt-file error#68
danielchalmers merged 2 commits into
mainfrom
encrypted-clip-detection

Conversation

@danielchalmers

Copy link
Copy Markdown
Owner

Why

Tesla software 2026.20 (released May 30, 2026) enables Encrypt Dashcam Recordings by default on Ryzen-infotainment vehicles — which includes every current model. The USB drive then holds AES-encrypted containers instead of MP4s, and the per-file keys are only obtainable from Tesla''s servers via the owner''s account (reverse-engineering write-up). The app can''t play that footage, but until now it also couldn''t say why: every chunk failed the moov probe, was auto-excluded by the builder, and the owner of a drive full of files saw "No front camera footage found."

What

  • EncryptedClipDetector sniffs the first box header of each chunk''s front file. A clip whose files all have content but none starts with a known ISO-BMFF box type is flagged as encrypted. A merely corrupt or truncated recording still carries its ftyp header on at least some chunks, so ordinary corruption stays on the existing probe/recovery path.
  • The two dead-end sites in VideoPlayerController (primary playlist missing after the builder excluded everything, and GiveUpOnClip) now show a message pointing at the in-car toggle (Controls > Safety > Encrypt Dashcam Recordings) and Tesla''s own viewer (dashcam.tesla.com).

Detection only — actually decrypting in-app would require Tesla account auth and posting file UUIDs to Tesla''s API, which is a separate product decision.

Verification

  • 246 tests pass (10 net-new: header sniffing vs valid/truncated/garbage/missing files, clip-level all-vs-some semantics, and two end-to-end controller tests through the real ffconcat builder asserting the encrypted message and that truncated-but-headered files keep the ordinary message).
  • Drove the built app against a synthetic clip of encryption-shaped files (20-byte header + IV-prefixed 4 KiB chunk): the error overlay shows the explanation with the toggle path and viewer link.

…le error

Tesla software 2026.20 (May 2026) turns on "Encrypt Dashcam Recordings"
by default on Ryzen-infotainment vehicles, writing AES-encrypted
containers to the USB drive instead of plain MP4s. The decryption keys
are only obtainable from Tesla's servers through the owner's account, so
the app cannot play the footage -- but until now it also could not say
why: every chunk failed the moov probe, got auto-excluded, and the user
saw "No front camera footage found." on a drive full of files.

EncryptedClipDetector sniffs the first box header of each chunk's front
file: a clip whose files all have content but none starts with a known
ISO-BMFF box type is flagged as encrypted (a merely corrupt or truncated
recording still carries its ftyp header, so it stays on the existing
recovery path). The two give-up sites in VideoPlayerController now show
a message that points at the in-car toggle (Controls > Safety > Encrypt
Dashcam Recordings) and Tesla's own dashcam.tesla.com viewer.

Verified live: a clip of encryption-shaped files (20-byte header +
IV-prefixed 4 KiB chunk, no box structure) shows the explanation in the
error overlay; header-carrying truncated files still report the
ordinary missing-footage message.
Per Daniel's style preference: no column-driven hard wraps. The encryption
message string is now one literal instead of a three-line + concatenation,
and the doc comments / inline comments I added break only at sentence
boundaries.
@danielchalmers
danielchalmers merged commit 86127e6 into main Jul 9, 2026
1 check passed
@danielchalmers
danielchalmers deleted the encrypted-clip-detection branch July 9, 2026 23:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant