>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
C-plus-plus

如何将旧 Android 手机变成清晰的 Windows 网络摄像头,无需广告或水印

如今购买一个像样的外置网络摄像头是一件值得商榷的事情。入门级产品的画面模糊、动态范围糟糕,而像 Logitech 这样像样的选项价格却高得离谱。与此同时,我们大多数人的抽屉里都躺着一部旧智能手机,其光学元件和传感器远超任何办公级网络摄像头。

通常,尝试用手机充当网络摄像头会遇到 DroidCam 或 Iriun 这类专有软件。免费版本要么限制分辨率,要么直接在视频上添加水印,要么不断弹出广告。我最近发现了一个名为 VCamdroid 的开源项目,其开发者直接解决了这个问题,没有任何多余的商业套路。

VCamdroid Demo

核心技术揭秘

该项目由两部分组成:一个 Kotlin Android 应用和一个 C++ Windows 客户端。其工作原理相当优雅。

手机通过 Camera2 API 捕获视频流,通过 OpenGL 着色器实时处理画面(旋转、镜像、色彩和曝光校正都在这里完成),然后将结果送入 MediaCodec 硬件编码器进行 H.264 或 H.265 编码。RootEncoder 库负责将视频流打包成 RTP,之后手机启动一个 RTSP 服务器。

Pipeline

在 Windows 端,客户端通过 FFmpeg 连接视频流,解码画面,然后将其发送到虚拟 DirectShow 设备。这使用 Softcam 库来注册 softcam.dll 驱动程序。PC 上的任何程序——无论是 OBS、Zoom、Telegram 还是 Discord——都会将智能手机识别为普通的物理 USB 网络摄像头。

有线和无线连接

视频流可以通过两种方式传输:

  1. 通过 Wi-Fi。电脑和手机必须在同一子网。打开桌面客户端的 Connect 选项卡,会显示一个二维码,用手机摄像头对准它,确认连接后即可开始推流。
  2. 通过 ADB 通过 USB 连接。这是主要也是最可靠的方案。通过数据线连接时,延迟极低,信号也不会受到邻居路由器拥堵的 2.4 GHz 频段影响。

Network

一个有趣的工程细节:ADB 工具只能通过 TCP 转发端口。默认情况下,RTSP 通常通过 UDP 传输 RTP 数据包,但这里视频流严格通过 TCP 交织模式隧道传输。这为我们提供了一个稳定的通道,直通 localhost,不会出现丢包。

这个项目在实践中的亮点

与那些臃肿的解决方案不同,VCamdroid 部署快捷,无需注册账号。

这套组合能实现以下功能:

  • 在通话过程中直接从 PC 切换前后摄像头模块。
  • 控制闪光灯、缩放、曝光和白平衡。
  • 利用手机 GPU 进行硬件加速图像处理,电脑处理器几乎不承担负载。
  • 同时连接多部手机。可以把一部智能手机挂在身后拍摄全景,将第二部对准自己的脸,然后在它们之间切换。

画面清晰干净,如果手机传感器支持,可以输出真正的 1080p 和 60fps。

快速上手

PC 需要 Windows 10 或 11,手机需要 Android 7.0 或更高版本。

首先,设置 Windows:

  1. 从仓库的 Releases 页面下载压缩包。
  2. 解压并以管理员身份运行 install.bat。此脚本在系统中注册 DirectShow 滤镜。
  3. 在 Windows 防火墙窗口中,允许应用访问专用网络和公用网络。

接下来,在手机上安装客户端:

  1. 在 Android 上启用开发者模式(连续点击手机设置中的版本号七次),然后开启 USB 调试开关。
  2. 通过数据线将手机连接到电脑,运行 install_apk.bat 脚本。它会自动通过 ADB 将 APK 推送到设备。

之后,在电脑上打开 VCamdroid,在智能手机上启动应用,它们会自动通过数据线发现彼此。

从源码构建

如果你想深入研究代码或添加所需功能,该项目可以使用标准工具构建。

对于 Android 部分,你需要全新的 Android Studio。所有采集和流媒体逻辑都打包在 android/ 目录中。

对于 Windows 客户端,你需要 Visual Studio 和 vcpkg 包管理器。依赖项可以通过一条命令拉取:

vcpkg install wxwidgets:x64-windows ffmpeg:x64-windows
vcpkg integrate install

然后构建 softcam 库,打开 windows/VCamdroid.sln,选择 Release x64 配置,编译项目。

局限性和不足之处

该项目在 GitHub 上约有 400 颗星,部分代码仍相对较新。如果你使用的是稀有或特定的 Android 固件,MediaCodec 可能会表现不稳定。

有时 Windows 防火墙会静默阻止通过 Wi-Fi 工作时的 RTSP 流量。在这种情况下,你必须手动深入 Defender 设置或通过 adb shell ping 检查 ping。还要注意,DirectShow 滤镜需要 PC 上安装最新的 Visual C++ Redistributable 运行库,否则应用会直接崩溃而不会显示有意义的错误信息。

VCamdroid 非常适合那些厌倦了笔记本电脑内置网络摄像头质量的人,或者不想为偶尔的视频通话花钱购买独立设备的人。该项目完全免费,采用 MIT 许可证开源,没有时间限制也没有水印。如果你有一部摄像头还不错但落灰的旧智能手机,这是一个让它重新发挥作用的好方法。

相关项目