把Android手机变成电脑摄像头,开发者倒苦水:40行代码搞定,但需要40个项目文件支持!

编译 | 苏宓
出品 | CSDN(ID:CSDNnews)
开发一款 App,难不难?
软件工程师 Thomas SIMON 闲暇之余用实践回答道:其实说难也不难 。
当他拿起一个 Android 手机,想要将其作为电脑摄像头和麦克风使用时,他只写了 40 行代码就实现了这一功能 。
只不过,令他苦恼的是,写 40 行代码背后需要安装超过 20GB 的工具、也需要创建数十个项目文件才能以运行 。
当他把自己的这段经历分享到网上时,没想到,引起了多位开发者的共鸣,纷纷表示,这种感觉太熟悉了 。

把Android手机变成电脑摄像头,开发者倒苦水:40行代码搞定,但需要40个项目文件支持!

文章插图
在分享的文章中,Thomas SIMON 引用马斯克曾经说过的一句话,「聪明工程师会犯的最常见错误,就是优化本不该存在的东西」 。开发本身或许并不难,只是被平白增加了很多的复杂性 。
接下来,我们将从 Thomas SIMON 的经历中了解开发者那些本该避开的坑 。
需要一个 App,把 Android 手机变成电脑摄像头和麦克风
之所以想要开发一款 App,是因为作为一名软件工程师,Thomas SIMON 平时保持着视频录制分享技术的习惯 。
此前,他主要使用 Android 手机来录制视频 。与台式机上的 linux 系统相比,Android 系统的兼容性很好,而且它很少出错,即使出错,也是以众人可接受的方式,譬如电池电量不足、系统更新等等 。
后来,Thomas SIMON 决定和一位朋友一起录制他们技术分享,并将其作为播客片段上传到网络上,期间需要对录制的文件进行剪辑、制作等等,还是电脑好操作一些 。
不过,Thomas SIMON 的 Linux 系统电脑并没有摄像头,所以在他的计划中,原来是想要将 Linux 电脑作为主设备进行录制,然后使用手机上的摄像头和麦克风加入通话 。
然而,在录制期间需要管理两台设备非常麻烦,况且搭载 Linux 系统的电脑设备本身就有一个不错的麦克风,所以,此时只要有一个 Linux 兼容的网络摄像头存在就可以解决难题 。
在研究市场上现有的网络摄像头之后,Thomas SIMON 认为那些设备不仅价格昂贵,而且质量还不如几年前的中档手机后置摄像头 。
恰巧他手头正好有一部三星 S20,手机的后置镜头是长焦镜头,非常适合拍摄人像,平行光线让人脸看起来清晰、漂亮 。
在这样的背景下,Thomas SIMON 萌生了自己开发一个 Android App 的想法,只需要通过 Wi-Fi 或其他方式将手机摄像头的数据流重定向到他的电脑上,让他的 Linux 电脑相信 Android 手机是一个摄像头,或者让 Linux 的应用程序(如 google Meet 和 Zoom)相信它是一个摄像头即可 。
也许有人会说,其实市场中也早已有了这样的软件,譬如 DroidCam 。DroidCam 软件分为两部分,一部分是手机上安装的软件,称为服务器;另一部分是 PC 上安装的软件,称为客户端 。只需要 PC 和手机连接到同一个 Wi-Fi,就可以把手机作为电脑摄像头 。
不过,Thomas SIMON 在使用后发现,DroidCam 是一款被广告限制且需要付费的应用程序,而且并非所有摄像头都能显示 。同时,经过测试,它的质量令人无法接受,即使是 720p 的低分辨率也被官方推荐 。
无法忍受之下,Thomas SIMON 决定自己开发一款 Android App,把 Android 手机相机变成电脑的摄像头 。
这有什么难的?
通过多年的积累,Thomas SIMON 已经掌握了全栈、Linux、视频流等方面的所有专业知识 。其表示,”虽然我一直对手机应用程序敬而远之,但我的整个职业生涯都是朝着网络、服务器应用程序和桌面原生应用程序方向发展的 。“
所以,对于 Thomas SIMON 而言,开发一款 Android App 难度其实并不大 。而且在他的规划中,他只想要一个包含选择相机、分辨率和退出键这几个菜单栏的 App,并不需要有太多的设计感 。
于是,Thomas SIMON 开始寻找制作 Android 应用程序的最简单方法 。他发现,几乎每个专家都在积极推动 Android Studio 作为 IDE 开发环境 。
不难想象,他下载了一个 Android Studio,结果发现,这是一个 1.1GB 的 .tar.gz 压缩包,一旦安装了所需的工具,最终会占用 20GB(分布在多个文件夹中)的空间 。
安装好工具之后,Thomas SIMON 开始寻找可以处理摄像头的官方 APIs 。
简而言之,Thomas SIMON 试过 cameraX,这是一个 Jetpack 库,旨在帮助简化相机应用程序的开发,但它太高级了 。所以 Thomas SIMON 最终使用了 camera2 。
Thomas SIMON 下载了一个 camera2 的官方示例项目,其实他只想拼接一个 http 服务器并用来传输帧,在他的设想中,整个过程应该只需要几分钟就可以完成的 。没想到,厄运从这里才真正开始......


推荐阅读