尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

0基础手把手:用Xposed与MediaCodec造一台安卓虚拟摄像头,三步替换App的画面

0基础手把手:用Xposed与MediaCodec造一台安卓虚拟摄像头,三步替换App的画面 0基础手把手用Xposed与MediaCodec造一台安卓虚拟摄像头三步替换App的画面【免费下载链接】android_virtual_camxposed安卓虚拟摄像头 android virtual camera on xposed hook项目地址: https://gitcode.com/gh_mirrors/an/android_virtual_cam视频会议里背景永远是白墙想换个花样还得靠滤镜更闹心的是我总怀疑某款App在后台偷偷开摄像头却拿不出证据。直到我翻到 android_virtual_cam——一个基于Xposed Hook和MediaCodec硬解码的开源项目这两件心事一口气全解决了。这篇文章就把我这次完整的折腾经历写成手记带你零基础跑通一台安卓虚拟摄像头。先说个故事我是怎么被摄像头逼疯的 起因是我在测试自己写的考勤App。公司要求刷脸打卡可测试环境里根本没有真人我只好对着屏幕举着手机一张一张换照片效率低到怀疑人生。后来我又发现某款号称只在你同意时才会调用相机的App会在后台偷偷初始化Camera——这种事靠肉眼根本抓不到。于是我开始找虚拟摄像头方案最终锁定了 android_virtual_cam。它的定位很纯粹用Xposed在系统层拦截相机API把真实画面替换成视频或图片。支持Android 5.0同时兼容Camera1和Camera2两代相机接口还能自动适配不同App的分辨率需求。五分钟快速上手从clone到画面替换 ⚡上手比想象中顺利核心就三步拉取代码并安装git clone https://gitcode.com/gh_mirrors/an/android_virtual_cam用Android Studio构建出APK装进手机然后在LSPosed等框架里启用模块并勾选要骗的目标应用无需选中系统框架。准备素材在手机存储的DCIM/Camera1/目录下放入视频命名为virtual.mp4如果你还想替换拍照结果再放一张1000.bmp其他格式改后缀名也能用。打开目标应用进入相机预览时屏幕上会弹出一个气泡消息告诉你当前预览的宽和高。这里一定要留意气泡里给出的分辨率就是你素材视频需要对齐的分辨率。等宽高一致后画面替换就生效了。全程不用写一行Java配置全靠文件系统——想临时停用就在Camera1目录下建个disable.jpg想关掉烦人的气泡就建no_toast.jpg改动全局实时生效。幕后发生了什么两个生活化比喻 快递分发的关口多了一个拦截员Xposed Hook你可以把系统API想象成一条快递流水线App发起调用就像寄出一件包裹本来应该直接送到系统手里。而Xposed做了一件事——在关口站了一个拦截员先拆包、调包再放行。android_virtual_cam的拦截点就设在几个关键包裹上预览纹理setPreviewTexture()、预览帧回调setPreviewCallback()、拍照takePicture()以及Camera2的入口CameraManager.openCamera()。核心代码长这样逻辑一目了然XposedHelpers.findAndHookMethod(android.hardware.Camera, lpparam.classLoader, setPreviewTexture, SurfaceTexture.class, new XC_MethodHook() { Override protected void beforeHookedMethod(MethodHookParam param) { // 在这里把真实纹理换成假纹理预览就被调包了 } });你顺着app/src/main/java/com/example/vcam/HookMain.java读下去就能看到这套拦截员是怎么一站一站布置的。一座流水线解码车间MediaCodec视频不会自己变成摄像头画面中间得有个加工车间。android_virtual_cam用的是Android自带的MediaCodec硬解码MediaExtractor负责把视频文件拆成一段段原料MediaCodec解码器负责把它们洗成YUV帧最后再按App需要的格式NV21、I420、YUV_420_888包装出厂装进等待队列送给Hook层。这套逻辑都写在VideoToFrames.java里跑在独立线程上一边解码一边投递尽量不拖慢相机预览。我的踩坑实录三个坑两个通宵 新手最幸福的瞬间往往是踩坑后恍然大悟的那一刻。我把最典型的三个坑记下来你绕开它们至少能省两个通宵。坑一画面黑屏相机直接起不来。我第一次打开目标App屏幕一片漆黑。排查了半天发现是路径问题——我手滑在DCIM下建了两级Camera1/Camera1/目录视频文件根本没被读到。删掉多余一层立刻恢复正常。另外要记住系统自带相机通常Hook不动别拿它当测试对象。坑二画面花屏、全是色块。这是新手最常碰见的。原因九成是视频分辨率没对齐气泡消息里的宽高。打开剪辑软件把视频压到和预览一致的分辨率花屏立刻消失。坑三前置摄像头画面方向不对。替换前置摄像头时视频经常需要水平翻转并右旋90度处理完再对齐分辨率方向才正常。这规则不是绝对的具体以你实际看到的画面为准。进阶玩法实验室 跑通基本功能后你可以把它当玩具实验室用App兼容性测试批量给被测App喂不同分辨率的摄像头验证它在各种规格下的表现。技巧用private_dir.jpg强制每个App使用私有目录互不干扰。隐私安全验证想知道哪个App在偷拍给所有可疑应用都装上虚拟画面谁偷偷开相机、画面走没走一目了然。技巧配合Xposed模块日志一起看证据更完整。视频通话美化提前录好一段虚拟人像视频放进Camera1通话时App看到的永远是它。技巧记得建no-silent.jpg让视频声音正常播放别在重要会议上静音出糗。写在最后从被摄像头支配到支配摄像头我最大的收获不是代码而是理解了安卓相机调用链的每一环。android_virtual_cam把Xposed Hook和MediaCodec这两个硬核主题浓缩成了一套靠放文件就能配置的工具对新手极其友好。现在就动手clone下来、装上模块、放一段你喜欢的视频打开目标App——看着画面被悄悄调包的那一刻你会回来感谢自己的。记住玩归玩别用它干违规的事技术的力量要用在正道上。【免费下载链接】android_virtual_camxposed安卓虚拟摄像头 android virtual camera on xposed hook项目地址: https://gitcode.com/gh_mirrors/an/android_virtual_cam创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表