104 lines
2.8 KiB
Markdown
104 lines
2.8 KiB
Markdown
# CamSwapper: A Virtual Camera Module (Android 10+)
|
|
|
|
**PLEASE DO NOT USE THIS SOFTWARE FOR ILLEGAL PURPOSES.**
|
|
|
|
CamSwapper is a virtual camera module that replaces your device's camera feed with video files or images at the application level (via Xposed/LSPosed) or system-wide (via HAL hook).
|
|
|
|
## Quick Start
|
|
|
|
1. Install the CamSwapper APK on a rooted device with LSPosed
|
|
2. Enable module in LSPosed Manager and select target apps
|
|
3. Select a video file from the app UI
|
|
4. Open any hooked camera app — your video plays as the camera feed
|
|
|
|
## Features
|
|
|
|
### App-Level Hook (LSPosed)
|
|
| Feature | Status |
|
|
|---------|-------|
|
|
| Local video file hooking | [x] |
|
|
| AMediaCodec hardware decoding (4K@60fps HEVC) | [x] |
|
|
| Static image hooking | [x] |
|
|
| Network stream (RTSP) | [ ] In progress |
|
|
| Preview cropping to match aspect ratio | [x] |
|
|
| Camera1 API photo capture | [x] |
|
|
| Camera1/Camera2 API hooks | [x] |
|
|
| Audio playback | [x] |
|
|
| Floating debug panel | [x] |
|
|
|
|
### System-Wide HAL Hook (Magisk/KernelSU)
|
|
| Feature | Status |
|
|
|---------|-------|
|
|
| LD_PRELOAD injection | [x] |
|
|
| All apps simultaneous | [x] |
|
|
| No per-app scoping | [x] |
|
|
| RTSP network streams | [x] |
|
|
|
|
## Requirements
|
|
|
|
- Android 10+ (API 29+)
|
|
- Root access
|
|
- LSPosed Framework 2.0.0+ (for app-level hook)
|
|
- Magisk or KernelSU (for system-wide HAL hook)
|
|
|
|
## Usage
|
|
|
|
### Setup
|
|
1. Place video files in `DCIM`, `Movies`, or other public storage
|
|
2. Grant the module media read permissions
|
|
3. Grant target apps media read permissions
|
|
4. In LSPosed, enable CamSwapper and select target scope (TikTok, Telegram, etc.)
|
|
5. **Force stop** target app after any changes
|
|
6. Tap the thumbnail area to select a video file
|
|
|
|
### Debugging
|
|
Enable "Print Logs" in the app, then:
|
|
```bash
|
|
adb logcat | grep "VCX"
|
|
```
|
|
|
|
## System-Wide HAL Hook
|
|
|
|
For system-wide camera replacement (all apps at once), flash the module ZIP:
|
|
|
|
### Installation
|
|
```bash
|
|
# Flash camswapper-hal-hook-v1.zip in Magisk/KernelSU
|
|
adb reboot
|
|
|
|
# Configure
|
|
enabled=1
|
|
source_mode=file # or rtsp
|
|
video_path=/data/local/camera_magic/video.mp4
|
|
rtsp_url=rtsp://192.168.1.100:554/stream
|
|
```
|
|
|
|
### Verification
|
|
```bash
|
|
# Check hook loaded
|
|
adb shell getprop wrap.android.hardware.camera.provider@2.7-service-google
|
|
|
|
# Check logs
|
|
adb logcat -d -s CameraHook
|
|
```
|
|
|
|
### Uninstall
|
|
```bash
|
|
adb shell su -c "rm -rf /data/adb/modules/camera-hook"
|
|
adb shell su -c "setprop wrap.android.hardware.camera.provider@2.7-service-google ''"
|
|
adb shell su -c "rm -rf /data/local/camera_magic"
|
|
adb reboot
|
|
```
|
|
|
|
## Known Issues
|
|
|
|
- Green lines on video edges — Fixed
|
|
- Camera1 API not stopping threads after recording — Fixed
|
|
- Camera2 API hook on menu switch — Fixed
|
|
- 4K audio desync on older devices (runtime permission) — Toggle front/rear camera as workaround
|
|
|
|
## Credits
|
|
|
|
- [FFmpeg](https://ffmpeg.org/)
|
|
- [libjpeg-turbo](https://libjpeg-turbo.org/)
|