Skip to content

Atomos-X/Camera2Magic

Repository files navigation

Camera2 Magic:一个虚拟摄像头软件?支持 android 10 +

README_EN.md ENGLISH Version translated by Google

请不要用于非法用途

img

文档

使用注意事项

**开发测试用机器: oneplus 8T lpddr4 (colorOS port 16.0)**
  • 视频文件需要放在本地公共存储目录,如: DCIMMOVIES
  • 必须授予模块读取媒体权限
  • 必须授予目标应用读取媒体权限
  • 手机需要root并安装lsposed模块,在lsposed manager中启用模块,勾选作用域(tiktok, telegram ...)
  • 模块安装、更新后需要强制关闭被Hook的应用,重新打开才会生效
  • 打开本模块,点击缩略图区域,弹出系统媒体选择器:选择一个视频文件,并确认
  • 根据需要,启用声音等其他功能
  • 如果需要使用浮动面板功能,需要授权被Hook应用的浮动窗口权限
  • 打开被Hook的应用,使用相机功能,应该能看到预览画面被你的视频替换了
  • 如果未能按预期工作,请开启打印日志功能。使用 adb logcat | grep "VCX"

开发进度

优化

  • 删除未使用资源,减少安装包体积: 48M -> 8M
  • native端混沌代码重写为模块化
  • 改善 camera1 api 拍照性能,由native端直接生成jpeg ByteArray,不再使用java端生成照片
  • 移除 CPU / 同步解码 nv21 bytes,这是一个不存在的需求。不支持GPU/异步转码的早期硬件性能无法支撑这个方案
  • 移除 GLES 2.0 回滚支持,这也是一个几乎不存在的需求
  • 强制开启 Triple-Buffered PBO,移除回滚代码
  • 新增 VAO 优化
  • 在目标App Camera HAL pipeline没有重建的情况下,使用热更新surface保证解码渲染的连续性

hook camera1/2 api

  • 初步检测目标应用的工作模式(普通,扫码,人脸检测)
    • HOOK所有工作模式(默认,扫码和人脸检测不会专门去处理)
  • 选择本地媒体视频解码
    • 使用 ffmpeg demuxer,完成一些网络视频流支持的初期工作
    • AMediaCodec 视频硬解码(sm8250大致流畅 4k@60fps HEVC)
      • 双缓冲 (Ping-Pong Mechanism)
      • 使用GPU转码nv21
    • 音频解码 初步的音频支持
  • 使用网络视频流
  • 替换预览画面
    • 修正preview surface绘制与视觉宽高保持一致
    • 裁切图像适配 preview surface ratio,尽可能不会拉伸变形
    • 适配目标应用实时切换 ratio
  • 生成 nv21 byte[]
    • camera1 api 拍照 使用当前 nv21 bytes数据(默认)
    • 强制将 nv21 data转换为视觉正像(默认)
  • 使用指定图片替换拍照数据 ?

模块自身UI

  • 主界面
    • 申请媒体权限
    • 点击空白缩略图选择媒体文件/长按缩略图删除
  • 功能开关
    • 模块临时开关
    • 播放音频开关
    • 打印日志开关(错误日志依然会打印)
    • 注入浮动面板开关

已知问题

  • BILIBILI相机无法使用。 已修复
  • 视频边缘绿线。已修复
  • camera1 api 在拍照和录制视频后未能正确停止解码播放等线程。 已修复
  • camera2 api 部分应用在某些菜单中切换(tiktok: POST<->TEMPLATES),未能正确hook相机的close信号,导致无法预期的停止启动解码线程。 已修复
  • 如果是在运行时授权应用相机权限,4k视频在较早机型上存在音频偷跑、视频马赛克,可在正常预览后通过切换前后摄像头临时解决,sm8250 lpddr4 8g ram,4k视频处理vpu极限了。 已修复
  • 某些应用的surface ratio切换时不能正确处理导致画面卡住。 已修复
  • FFmpeg的av_find_best_stream在找不到流时,返回值不是预期的 -1,导致使用m_audio_stream_index != -1 判断失效。 已修复

向目标应用注入浮动窗口,用来开发调试

  • 浮动窗口框架
  • 以低分辨率和帧率预览 nv21 bytes
  • 完成其他功能菜单

文档

  • 详细的文档

About

A Virtual Camera, support Android 10+

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages