最近需要一个可以覆盖整个房间的监控摄像头。

通常摄像头镜头的视角有限,只能覆盖一个区域。为了可以覆盖更大的区域,很多摄像头配备了云台可以调节朝向。但是云台带上电机后,一是体积做不小,放在屋顶垂下来不大好看,此外远程查看的时候,转来转去必然引人注意;另一种思路是使用鱼眼镜头,鱼眼镜头是一种超广角镜头,其视角接近180°,覆盖范围极广。

鱼眼镜头这种简单结构的摄像头正符合我的需求。淘宝搜索一番,选择了TP-Link TL-IPC55A

选择这个摄像头有这么几个原因:

  • 结构简单,体积小,和新风口和烟雾报警器这么大,安装在屋顶一点都不突兀。
  • 支持Onvif协议。虽然现在出现很多智能摄像头,但是都使用了私有协议,需要专用App才能查看,这让我觉得隐私很没有安全感。

TP-Link官方提供的App功能还是挺丰富的,所谓的智能摄像头带的功能都有,连接速度还挺快,自带了1个月的云储存。只是这些功能都需要将图像传到云端。所以,这个App在用他给摄像头配好网之后就弃用了。在路由器openwrt中,配置防火墙,禁止摄像头的mac地址和wan通讯。此时,App已经无法查看图像了。

为了记录摄像头的数据,我尝试了几个开源方案:ZoneMinder、Shinobi。最后还是使用群晖的Surveillance Station。作为商业软件,其比开源的方案成熟很多:

  • 用户权限控制的很细,比如我可以给育儿嫂分配了账号,只能看到宝宝的卧室的摄像头。甚至能细到某个账号只能看到图像听不到声音。

  • 所有工作不需要云的参与,所以我把群晖整个也用防火墙阻挡了外网访问。

  • 网页端全h5就可以看,不用安装插件,pc端有桌面客户端,移动端,都有App,很方便看。

  • 支持鱼眼镜头的矫正,全景摄像头可以被切成4个视角并消除变形。

  • 提供了内网就可以使用的API,可以方便和其他系统集成。

缺点嘛:价格贵。大于两个摄像头的话,其授权费用可以买好几个TP-Link TL-IPC55A了。

将摄像头禁止外网并使用Surveillance Station主要有两个问题:

  1. 摄像头的时间不对,猜想是摄像头连接不到外网的时间服务器。

  2. 鱼眼畸变无法矫正。

问题1比较简单,TL-IPC55A网页界面上,提供了设置ntp服务器的地址,本身群晖也提供了ntp服务,将其修改指向群晖即可。

对于问题2,Surveillance Station内部自建了鱼眼矫正,但是仅仅限于官方列表中的摄像头,TL-IPC55A不在此列。为了使其支持TL-IPC55A,我做了一番研究。

首先是ssh进群晖,转到Surveillance Station的安装文件夹。在我的设备中是/volume1/@appstore/SurveillanceStation

在里面翻一番,很容易就找到了/volume1/@appstore/SurveillanceStation/device_pack/camera_support文件夹,里面包含了各种相机品牌。

ash-4.3# cd camera_support/
ash-4.3# ls
3S.conf           Beward.conf      fisheye.conf        IQinVision.conf     ONVIF_event.conf    StorageOptions.conf
ABUS.conf         BOSCH.conf       FlexWATCH.conf      ITX.conf            Optica.conf         Sumpple.conf
ACTi.conf         Brickcom.conf    Forenix.conf        Jovision.conf       Panasonic.conf      Sunell.conf
Acumen.conf       CANON.conf       FOSCAM.conf         JuFeng.conf         PIXORD.conf         TOSHIBA.conf
Afidus.conf       CISCO.conf       GeoVision.conf      JVC.conf            Reolink.conf        TP-LINK.conf
AIPHONE.conf      COMPRO.conf      GeoVision.conf.bak  LDLC.conf           RetailSupport.conf  TRENDNet.conf
Airlive.conf      DAHUA.conf       Grandstream.conf    Levelone.conf       ROBIN.conf          Truen.conf
A-LINKING.conf    Dericam.conf     GrandTec.conf       LILIN.conf          SAMSUNG.conf        TVT.conf
Alphafinity.conf  DIGITUS.conf     HAIKON.conf         LINKSYS.conf        SANYO.conf          UBIQUITI.conf
AMCREST.conf      DivioTec.conf    HEDEN.conf          LTS.conf            SecuFirst.conf      UDM.conf
A-MTK.conf        D-Link.conf      HiKam.conf          LUPUS.conf          Sentry360.conf      Uniview.conf
Apexis.conf       DynaColor.conf   HIKVISION.conf      MAGINON.conf        SHANY.conf          Vivotek.conf
Arecont.conf      EDIMAX.conf      HiLook.conf         Messoa.conf         SHARP.conf          Vultech.conf
ASUS.conf         Eminent.conf     HI-SHARP.conf       MicroView.conf      SIEMENS.conf        WansView.conf
AVer.conf         Eneo.conf        Hitron.conf         Milesight.conf      Skywatch.conf       Y-CAM.conf
Avigilon.conf     EnGenius.conf    HJT.conf            MINTEC.conf         SMAX.conf           Zavio.conf
AVTECH.conf       ESCAM.conf       Hunt.conf           MOBOTIX.conf        SMC.conf            Zyxel.conf
AXIS.conf         ETROVISION.conf  iMege.conf          Nexcom.conf         Sony.conf
Aztech.conf       EverFocus.conf   INSTAR.conf         NGOffice.conf       SparkLAN.conf
BASLER.conf       Ezviz.conf       Intellinet.conf     OncamGrandeye.conf  Speco.conf
Beseye.conf       EZWATCHING.conf  iPUX.conf           ONVIF.conf          StarDot.conf

通过vi TP-LINK.conf,看一下tp-link的配置文件,里面定义了一些型号。注意到这么一段:

[TP-LINK*NC450]
{BasicSettings}
    api = tplink
    firmware_list = 1.20,1.24
    h264 = rtsp
    audio_format = G711
    camera_parameters = yes
    ntp_server = Surveillance Station,pool.ntp.org,time.nist.gov,time.windows.com,disable
    rtsp_protocol = tcp
    force_restart_time = 90
    force_sync_time = yes
    device_entry = /onvif/service
    event_entry = /onvif/service
    imaging_entry = /onvif/service
    media_entry = /onvif/service
    ptz_entry = /onvif/service
    ptz_xmax = 1
    ptz_xmin = -1
    ptz_ymax = 1
    ptz_ymin = -1

可以看到熟悉的onvif,说明他是一款onvif的相机。在Surveillance Station中,尝试选择tplink的NC450型号的配置文件,连接TL-IPC55A,发现可以连接成功,但是鱼眼畸变并没有矫正。

注意到上面的api=tplink,猜想这里的意思是会通过tplink为api去连接相机。

在官网上网络摄像机支持列表中,找到了一款配置类似的鱼眼相机GeoVision GV-FE520,尝试是否可以改造使其能够连接tplink的相机。

运行vi GeoVision.conf,找到GV-FE520,试着将其api改成tplink

[GeoVision*GV-FE520]
[GeoVision*GV-FE521]
{BasicSettings}
    api = tplink
    channel_list = profile_Default
    default_channel = profile_Default
    device_entry = /onvif/service
    media_entry = /onvif/service
    event_entry = /onvif/service
    imaging_entry = /onvif/service
    vendor = Geovision
    model = GV-FE520/FE521
    version_major = 2
    version_minor = 0

重启Surveillance Station,然后尝试使用GeoVision GV-FE520的配置连接TL-IPC55A,发现可以连接成功,并且鱼眼畸变已经被完美矫正。

至此群晖Surveillance Station完美支持TP-Link TL-IPC55A。