Skip to content

Releases: aimardcr/ReCam

ReCam v0.1.1

Choose a tag to compare

@aimardcr aimardcr released this 13 Oct 20:32

What’s changed

  • Fixed video and live H.264 sources falling back to color bars on some MediaTek devices, including the Galaxy A04e. (#1)
  • Improved decoder compatibility by validating pixel format, stride, crop, and buffer boundaries.
  • Added Android x86_64 CLI binaries for emulator and testing use.

ReCam v0.1.0

Choose a tag to compare

@aimardcr aimardcr released this 21 Sep 09:56

First release.

ReCam replaces the pixels in Android camera buffers before they reach the app.
It hooks Camera3OutputStream::returnBufferCheckedLocked inside cameraserver,
so every camera client on the device sees your frames — no app modification, no
Xposed, no per-app hooks.

Only use this against devices and services you own or are authorized to test.

Downloads

File For
ReCam-v0.1.0-windows-x64.zip Desktop console. Unzip, run ReCam.exe. Device binaries are bundled.
recam-cli-v0.1.0-android-arm64.zip Device binaries only, for driving ReCam from a shell.

adb and ffmpeg must be on PATH. Neither is bundled.

What works

  • Preview, still capture and video recording, including IMPLEMENTATION_DEFINED
    buffers, where the layout is read from the gralloc driver rather than guessed
  • Up to four stream sizes at once, so an app running preview and analysis at
    different resolutions gets correct frames on both
  • Five sources: test pattern, RTMP (built-in listener, works with OBS), video
    file played on-device, arbitrary ffmpeg input, and any local capture device
    including OBS Virtual Camera
  • Frame metadata is untouched, so timestamps and sensor characteristics stay as
    the real camera reported them
  • recam_stop restores the real camera without restarting cameraserver

Requirements

Rooted device, arm64-v8a, Android 11 (API 30) or newer, USB debugging.

Verification status

The full chain is verified on one physical device: Android 16, arm64-v8a,
MediaTek with PowerVR gralloc. Symbol resolution is verified across Android
11–16, and the dynamic-linkage path on an Android 14 x86_64 emulator.

Qualcomm and Exynos gralloc are untested. Where the device cannot describe a
buffer, the hook passes the real frame through rather than writing a guess, so
an unsupported device shows the real camera instead of corrupted output. Run
recam_test to check a new device: it runs 63 checks inside cameraserver.

Known limitations

  • Live H.264 senders must encode with -bf 0. The desktop console does this
    for you; set B-frames to 0 yourself if you publish from OBS over RTMP.
  • A live sender's resolution is fixed at connect. Changing it mid-stream does
    not reconfigure the decoder.
  • Source rotation metadata is read but not applied; frames are delivered in
    buffer space and the app's own sensor transform still applies.

Full Changelog: https://github.com/aimardcr/ReCam/commits/v1.0