0a79c4ac0d363abffcd0c96019d622c9
雕虫晓技(七) 用旧Android手机做远程摄像头

科技发展越来越快,手机也换的越来越频繁,有很多旧手机都被淘汰了,这些旧手机一般没什么用,也不能卖,毕竟手机中可能还存在着一些私人数据可能没有清空,因此这些旧手机就只能放在家里落灰了。

对于大多数人来说,这些旧手机都是无法被利用起来的,虽然网上有很多的利用旧手机的教程,但很多要么是很鸡肋,要么是操作难度较高,需要较强的动手能力。

那么今天呢,就教大家如何低成本的快速将旧 Android 手机变成一个可远程访问的摄像头

本文定位是一个比较基础的教程,假设大家对这方面都不熟悉,所以文中啰嗦的内容比较多,有些技术点如果大家已经有所了解,可以跳过内容。

1. 搭建局域网摄像头

搭建局域网摄像头需要一个软件,那就是 ip-webcam,能访问谷歌商店的用户可以直接在商店内搜索 “ip-webcam” 下载即可,对于无法访问的用户可以到 https://www.appsapk.com/ip-webcam/ 进行下载。

ip-webcam 是一款免费软件(免费版本存在广告),它有一个付费的 pro 版本,pro版本功能更强,但只能在谷歌商店购买,如果想买但是没有可用的付款卡,可以使用礼品卡进行充值购买,礼品卡在淘宝有卖。但是对于普通用户来说,免费版已经足够了。

ip-webcam 的图标是这样的:

打开后里面大概这样子:

由于我们后面会把这个摄像头放到公网上,所以需要把设置一个账号密码,不然很不安全。但是如果只是需要在局域网使用的话,账号密码可以留空。


在配置完账号密码后,其他内容可以按照自己的需要进行调整,需要注意的是,如果家庭网络的上行带宽比较低的话,可以适当的把视频分辨率和帧率调低一点,否则在外网访问的时候会一直卡顿。

在设置完成后,翻到最后面一条,直接点击开启服务器即可。

在服务开启后,会在界面上显示视频的连接地址,如下:

如上图所示,上面的地址就是服务访问地址,在当前网络内任意电脑或者手机上输入该地址即可访问到摄像头,点击浏览器选项就可以看到视频的内容。

可以看到,它除了查看视频之外,还有很多功能,例如:动作检测(自动抓拍),开关闪光灯,循环录制等。

还有更多的高级功能,例如配合 tasker 来开发更多功能,大家可以自行发掘。

注意:

用手机做摄像头,需要注意发热问题,部分手机因为设计问题,长期开启摄像头会导致手机发热严重,如果长时间发热可能会损坏设备,至于自己的设备是否适合做摄像头,可以自己先试验一下,一般来说,常温下运行一两个小时以上没有因为过热导致关机等问题就可以作为一直开启的摄像头来用。但是仍然需要注意不要放置于温度过高或者阳光直射的地方。

如果是一直开启则应该放置在电源附近,或者买一根比较长的数据线来为其充电。

2. 连接到公网

上面开启的摄像头只能在局域网使用,如果需要在公网使用,那么就稍微麻烦一点了。如果自己办理的宽带有静态的公网IP,那么可以在路由器上设置一下端口映射就可以在外网访问了。

但是大部分用户办理的宽带都是动态公网IP或者共享公网IP,那么设置端口映射就不管用了,因此就需要考虑一些其他方案。

2.1 免费方案

如果不想花钱,直接搜索动态域名解析、内网穿透就可以找到相关软件,有很多商业的软件可以用,例如:花生壳、nat123 等。这些商业软件都有详细的使用说明,我也就不再赘述了,有需要的可以自行搜索使用方案,对于动手能力不太强或者需求不大的用户来说,直接注册后使用免费套餐即可,相对来说安装更加简单。

但是免费一般会有很多的限制,例如流量限制,映射条数限制,域名限制等。并且一般还需要实名认证。因此个人试用过一段时间这种方案后,觉得用着很不舒服,于是也就放弃了。

2.2 极客方案

首先声明,这种方案并非免费,但是所有的内容都可以掌控在自己手里,如果仅仅只是需要一个家庭摄像头的话,又不想花太多钱,直接去淘宝买一个成品带服务或许更便宜一点。

(由于家庭摄像头拍摄位置可能会涉及到隐私区域,因此个人对部分商业摄像头直接把非加密视频数据上传到公司服务器上是十分不信任的,除此之外,很多商业摄像头为了方便远程调试安装,都留有一定的远程控制方案,我相信商业公司员工不会私自查看视频信息,但是这种方式会给一些居心不良的黑客留下可乘之机,因此我自己搭建了一套服务。)

我使用的这种方案需要一个公网服务器作为代理,因为服务器不承载主要的运算服务,只是做流量转发,所以不需要很高的性能,也不需要大量的存储空间,我自己目前使用的是1核1G的乞丐级配置,在阿里云上租用一年300多。当然,部分国外的服务器会更加便宜,例如我在其他平台上租用的美国服务器,一年服务费用大约200多元,赶上促销的话,不到100元就能租用一年的服务,但是由于是做流量转发的,自己又主要在国内活动,国外的服务器延迟稍微有点大,因此就买了比较贵的阿里云服务。需要注意的是,如果不想备案的话,可以买香港服务器,当然国外的cn2也是可以接受的。

最重要的是,一台服务可以做的事情很多,包括但不限于以下事情:私有云盘、个人网站、Git仓库、代理服务、游戏服务器、下载服务、爬虫。

2.2.1 实现原理

上面说了一大堆乱七八糟的东西,下面先说一下这种方案的原理:

原理其实非常简单,就是一个反向代理服务,用一台公网的代理服务器(proxy-server)作为跳板,可以从公网上任意位置访问这个服务器,之后这个服务器会把接收到的信息转发给对应的代理客户端(peoxy-client),由代理客户端去访问处于内网的服务,内网服务响应后,按照相反的路径传递回去,最终就可以实现从任意位置访问到内网的服务啦,原理图如下:

图片来自: https://github.com/ffay/lanproxy/blob/master/README_en.md

2.2.2 实现方案

我在GitHub上找到了一个开源的反向代理工具,这个工具有打包好的版本,并且部署非常简单,它就是 lanproxy。

GitHub 地址: https://github.com/ffay/lanproxy

lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,目前仅支持tcp流量转发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面...)。目前市面上提供类似服务的有花生壳、TeamView、GoToMyCloud等等,但要使用第三方的公网服务器就必须为第三方付费,并且这些服务都有各种各样的限制,此外,由于数据包会流经第三方,因此对数据安全也是一大隐患。 https://lanproxy.io2c.com

2.2.3 下载软件

https://seafile.io2c.com/d/3b1b44fee5f74992bb17/ 下载打包好的服务端和客户端。

2.2.4 上传服务端到自己的服务器

我自己使用的是阿里云的服务器,CentOS 7.4 系统,因此就以此系统为基准做介绍,当然,其他的系统也是支持的(包括各类Linux和WIndows)。

这里需要注意的是,此处需要熟悉一些基础的 linux 相关命令,假设大家都会一点基础的 Linux 命令。

如果大家对 vi(vim) 等文本编辑命令熟悉的话,直接上传原始server端压缩包到服务,解压后通过这些命令对配置文件(proxy-server-20171116/conf/config.propertoes)进行编辑即可。

如果不熟悉 linux 上文本编辑相关命令,可以现在自己电脑上解压,找到对应的配置文件(proxy-server-20171116/conf/config.propertoes) 进行编辑,之后再次压缩进行上传到服务器也可以。

默认的配置文件如下:

server.bind=0.0.0.0
server.port=4900

server.ssl.enable=true
server.ssl.bind=0.0.0.0
server.ssl.port=4993
server.ssl.jksPath=test.jks
server.ssl.keyStorePassword=123456
server.ssl.keyManagerPassword=123456
server.ssl.needsClientAuth=false

config.server.bind=0.0.0.0
config.server.port=8090
config.admin.username=admin
config.admin.password=admin

注意:修改 username 和 password 字段。

之后通过 scp 命令将服务端上传到服务器:

scp local_file remote_username@remote_ip:remote_folder

# 例如
scp lanproxy-server-20171116.zip root@12.34.56.78:/home/lanproxy

2.1.3 安装基础工具

使用 ssh 命令登陆服务器,阿里云可以直接在网页登陆,其他服务器使用ssh命令登陆即可。

# 登陆到服务器
ssh root@ip
# 输入密码,密码从购买服务器的平台获取,输入密码时不会显示任何字符,输入完成后直接点击回车键就可以了。

如果你的服务上没有zip软件解压工具,可以通过下面的命令安装:

yum install zip unzip

除了这些工具外,还需要安装 java 运行环境,直接安装 openjdk就可以了,1.7 或者 1.8 版本都可以。

yum install java-1.7.0-openjdk.x86_64

安装完成后解压软件:

unzip lanproxy-server-20171116.zip
top Created with Sketch.