Repository navigation
Releases: aimardcr/ReCam
Release list
ReCam v0.1.1
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
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_stoprestores the real camera without restartingcameraserver
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