局域网点对点 · 原生 Android · Kotlin + Compose

看不到相机那台手机?
用另一台远程取景、遥控拍照

两台手机安装同一 App:A 机作为相机/被拍摄端,B 机作为控制/预览端,实时查看画面并远程控制拍照、前后摄切换、闪光灯与录像。数据只在局域网内点对点传输,配对码 + 加密握手,陌生设备无法接入。

安装包待正式签名构建:当前提供源码包与构建脚本,可在 Android Studio 一键编译;已签名的 Release APK 构建完成后将直接替换此处下载链接。

工作方式

A 机取景,B 机遥控,各司其职

两台设备运行同一个安装包,首次进入选择本机角色即可。

DEVICE A · 被拍摄端

📹 相机端

  • 申请 CAMERA / RECORD_AUDIO,使用内置相机取景
  • 实时预览、前后摄切换、闪光灯、拍照存媒体库、录像
  • 常驻「远程取景中」横幅 + 前台服务通知,可一键断开
  • 把画面经 H.264 编码后通过局域网 TCP 推给 B 机
DEVICE B · 控制端

🎛 控制 / 预览端

  • 扫码或输配对码连接 A 机,实时解码显示预览
  • 拍照、开始/停止录像、切换镜头、闪光灯
  • 点击预览画面对应位置,映射为 A 机的对焦/测光点
  • 查询 A 机连接、电量、剩余存储与相机状态
功能

相机端该有的,远程控制都拿得到

🎯

实时取景预览

CameraX 预览经编码后低延迟推流到控制端,画面所见即所拍。

🔁

前后摄切换

一键翻转镜头,自动请求关键帧,预览快速锁定不花屏。

💡

闪光灯 / 常亮

支持拍照闪光与 torch 常亮,无闪光灯硬件时自动禁用该项。

📸

拍照存媒体库

拍摄的照片直接写入 A 机系统相册(MediaStore Pictures/RemoteCam)。

🎬

录像带音频

MediaRecorder 录制到 Movies/RemoteCam,可选麦克风同步收音。

👆

点击对焦测光

控制端点击预览即映射 AF/AE 点,精确掌控对焦点与曝光。

🔋

设备状态查询

连接、电量、存储空间、当前镜头与相机占用状态一目了然。

📶

NSD 自动发现

同一 Wi-Fi 下自动发现相机端,也支持手动输入 IP 兜底。

🛡️

透明可控

每次连接与开摄像头都有清晰提示,两端都能随时断开。

传输层

局域网点对点,传输层可插拔

不依赖任何外网服务器。信令用原生 NSD + TCP Socket,命令与视频走加密通道,接口化设计便于按环境切换。

1

发现与配对

A 机注册 _remotecam._tcp,展示二维码 + 6 位配对码;B 机扫码或手动连接。

2

加密握手

ECDH(P-256) + HKDF(配对码为盐) 派生会话密钥,双向 token 证明,随后 AES-GCM 加密全部指令。

3

视频推流

默认 CameraX→MediaCodec(H.264)→局域网 TCP,独立视频端口,晚加入等下一个 IDR。

默认:H.264 / TCP(兼容性最好) 可选:WebRTC(低延迟,接口可切换) 命令通道:AES-GCM 可靠双向 发现:NSD + 手动 IP 兜底

🔒 安全与合规

仅用内置相机本 App 自行申请权限并使用 CameraX 取景,不读取、不镜像、不遥控任何系统相机 App。
拒绝隐蔽手段不使用无障碍服务、后台偷录或绕过权限;不隐藏录制。
配对即认证没有 6 位配对码无法通过加密握手,陌生设备无法接入;信道全程 AES-GCM 加密。
透明可断开相机端常驻「远程取景中/录制中」状态横幅与前台服务通知,一键立即断开。

🤖 鸿蒙 / 卓易通兼容与降级

启动即探测运行时类型、CameraX、前后摄/闪光灯、H.264 编解码、组播、NSD 全部上报。
WebRTC 不稳自动改走 H.264-over-TCP,永远可用。
NSD 被抑制降级为手动输入相机端 IP + 配对码。
相机被占用明确提示并支持重连;断线自动对齐关键帧。

下载 RemoteCam

在两台手机上安装同一 App,分别选择「相机端」与「控制端」即可开始。

提示:源码包解压后用 Android Studio(Ladybug+ / JDK 17)同步 Gradle 即可构建;默认构建走局域网 H.264 传输路径,兼容 Android 8.0 及以上与鸿蒙卓易通。