注意:本文公网远程监控部分需要借助有公网IP的云服务器进行ssh反向代理。

一、借助motion实现内网的视频监控

  • 准备

    • 插上摄像头,然后输入ls /dev/video*命令检查是否识别了摄像头
  • 安装motion
    • motion是linux开源的,在树莓派上使用sudo apt-get install motion命令安装,安装很方便。
  • 修改motion配置
    • 常用配置及含义
    # Start in daemon (background) mode and release terminal (default: off)
    # 在后台运行。设置为off将在前台运行
    daemon on
    # Videodevice to be used for capturing (default /dev/video0)
    # for FreeBSD default is /dev/bktr0
    # 视频设备,刚才ls /dev/video*看到的
    videodevice /dev/video0
    # Image width (pixels). Valid range: Camera dependent, default: 352
    # 图像宽
    width 320
    # Image height (pixels). Valid range: Camera dependent, default: 288
    # 图像高
    height 240
    # The setting for keep-alive of network socket, should improve performance on compatible net cameras.
    # off: The historical implementation using HTTP/1.0, closing the socket after each http request.
    # force: Use HTTP/1.0 requests with keep alive header to reuse the same connection.
    # on: Use HTTP/1.1 requests that support keep alive as default.
    # Default: off
    # 开启KeepAlive功能
    netcam_keepalive on
    # Output 'normal' pictures when motion is detected (default: on)
    # Valid values: on, off, first, best, center
    # When set to 'first', only the first picture of an event is saved.
    # Picture with most motion of an event is saved when set to 'best'.
    # Picture with motion nearest center of picture is saved when set to 'center'.
    # Can be used as preview shot for the corresponding movie.
    # 禁用自动拍照保存的功能
    output_pictures off
    # Use ffmpeg to encode movies in realtime (default: off)
    # 禁用自动拍摄视频保存的功能
    ffmpeg_output_movies off
    # The mini-http server listens to this port for requests (default: 0 = disabled)
    # 视频监听的端口,默认8081
    stream_port 1001
    # Quality of the jpeg (in percent) images produced (default: 50)
    # 图像质量
    stream_quality 50
    # Output frames at 1 fps when no motion is detected and increase to the
    # rate given by stream_maxrate when motion is detected (default: off)
    stream_motion on
    # Maximum framerate for stream streams (default: 1)
    # 帧数8,需要先把上面的选项改成on
    stream_maxrate 8
    # Set the authentication method (default: 0)
    # 0 = disabled
    # 1 = Basic authentication
    # 2 = MD5 digest (the safer authentication)
    # 改成1,增加授权验证,访问需要输入密码
    stream_auth_method 1
    # Authentication for the stream. Syntax username:password
    # Default: not defined (Disabled)
    # 设置用户名username和密码password
    stream_authentication username:password
    # Restrict stream connections to localhost only (default: on)
    # 改成off允许外网访问视频
    stream_localhost off
    # TCP/IP port for the http server to listen on (default: 0 = disabled)
    # WEB控制台监听的端口,默认8080
    webcontrol_port 1000
    # 改成off允许外网访问web控制台
    webcontrol_localhost off
    • 必须要修改的有:daemon onwebcontrol_localhost off。默认配置可能有明显卡顿,这时自行调参数即可。最后效果可以十分流畅。
    • 使用sudo motion命令可以开启motion
    • 使用sudo killall -TERM motion可以关闭motion
  • 检验
    • sudo motion后,在浏览器输入ip:你设定的端口号(默认8081) 即可查看实时监控。如:192.168.137.30:8081。
    • 注意:此时只能在内网访问。

二、通过ssh反向代理树莓派实现公网远程视频监控

  • 树莓派上

    • ssh -CqTfnN -R 0.0.0.0:12345:localhost:8081 ubuntu@yourserver(test.server是云服务器的域名或者ip)
    • 这样就建立了一个本地pi的8081端口到yourserver的12345端口的连接,之后yourserver就可以利用这个端口和pi通信了。
  • 服务器上
    • ssh -fCNL "*:12345:localhost:12346" ubuntu@yourserver
    • 建立一个12346端口监听别的客户机的请求,当12346端口收到数据时候把数据转给12345端口,然后12345端口与树莓派的8081端口连接,实现了“代理”的效果。当浏览器访问云服务器的12346端口时,相当于访问树莓派的8081端口,从而实现了公网的实时监控。
    • 利用这种ssh反向代理的方法也可以实现公网远程控制树莓派。
  • 检验
    • 树莓派开启motion后,在浏览器输入服务器ip:服务器设置的监听端口(本例为12346)即可看到motion的视频。
    • 注意:由于网速的限制,视频可能有卡顿。此时修改motion配置,降低大小、帧率、画质等可以消除卡顿。

ssh反向代理树莓派+motion,实现公网远程视频监控的更多相关文章

  1. 基于ssh反向代理实现的远程协助

    本文描述了怎么通过ssh反向代理实现远程协助,并提供了相关代码. 可满足web开启远程协助功能后,维护人员能够通过ssh和http登录客户机器(包括在nat环境下) web开启该功能后,ssh才能登录 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. ssh反向代理

    文章链接:https://www.cnblogs.com/kwongtai/p/6903420.html 前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后 ...

  4. SSH 反向代理

    SSH反向代理 被控制端没有NAT或者没有静态公网IP,把本端一台服务器映射到外网给远端SSH进来,建立SSH反向隧道. 先映射本端机器到外网  nat server 2222to22 protoco ...

  5. ssh 反向代理和正向代理的文章

    搜索原因是,我希望访问家里内网的机器 技术要点: ssh 反向代理,正向代理 隧道 文章摘自: https://my.oschina.net/leejun2005/blog/94401 https:/ ...

  6. Python远程视频监控

    Python远程视频监控程序   老板由于事务繁忙无法经常亲临教研室,于是让我搞个监控系统,让他在办公室就能看到教研室来了多少人.o(>﹏<)o||| 最初我的想法是直接去网上下个软件,可 ...

  7. 如何利用SimpleNVR建立全天候远程视频监控系统

    随着社会经济的发展,5G.AI.云计算.大数据.物联网等新兴技术迭代更新的驱动下,传统的安防监控早已无法满足我们的需求.那么我们如何建立全天候远程视频监控系统来替代传统监控呢?如何进一步优化城市管理. ...

  8. 记一次 用 ssh 反向代理解决的远程操作效率问题

    公司在异地有一个项目,项目在内网有一个linux 集群开发人员通过 xshell 进行操作,但是开发过程中还需要公司开发人员进行远程操作,原来采用的方案是向日葵,需求能实现但是限于网络环境向日葵实在是 ...

  9. frp ssh反向代理配置使用

    本质是一个内网反向代理工具,需要一个vps配合,因为要外网ip. 主页: https://github.com/fatedier/frp 1.服务端(VPS) 可以用下面的一键安装脚本,也可以用主页上 ...

  10. deepin配置反向代理映射本地到公网

    这里我是用的小米球的免费ngrok 相信deepin的新用户在配置反向代理时,会感觉到一脸茫然,因为一开始我也是这样,但经过短暂的了解了deepin后,发现,其实与在Debian上配置并没有什么区别! ...

随机推荐

  1. 85、使用Vue.js实现列表选中效果

      实际项目中,我们会遇到很多类似的需求,一个列表,需要点击其中一条高亮显示.熟悉JQuery的同学说这个太简单了.可以给这个选中的element设置一个active的class.配合Css样式,让a ...

  2. Go 的位操作

    在计算机内存昂贵,处理能力有限的美好旧时光里,用比较黑客范的位运算方式去处理信息是首选方式(某些情况下只能如此).时至今日,直接使用位运算仍然是很多计算领域中不可或缺的部分,例如底层系统编程,图形处理 ...

  3. js 操作(数字前端去0、文字去除空格、截取字符串、保留几位小数、数字不足位数前补0)

    1.数字前端去0 var num = number.replace(/\b(0+)/gi,"") 2.文字去除空格 var str = str.replace(/(^\s*)|(\ ...

  4. WDA学习(21):WDA Popup,Message,Focus

    1.14 WDA Popup,Message,Focus WDA测试Popup,Message,光标Focus功能. 1.创建Component; COMPONENTCONTROLLER页签 Cont ...

  5. vs2015当前不会命中断点,还没有为该文档

    经百度,需在项目>项目属性>生成>优化代码的勾去掉>保存>再次F11调试可解决

  6. Tomcat put 漏洞批量工具

    工具下载 https://share.weiyun.com/96ffd3bf26b09ffece8d01317f3b3efb

  7. MongoDB 分片模式

    Sharding (分片模式) 副本集可以解决主节点发生故障导致数据丢失或不可用的问题,但遇到需要存储海量数据的情况时,副本集机制就束手无策了.副本集中的一台机器可能不足以存储数据,或者说集群不足以提 ...

  8. 22 BootStrapModelForm

    方便之处在于,我们不会再一遍一遍的写form的样式了. from django import forms class BootStrapModelForm(forms.ModelForm): def ...

  9. mysq 报错, sql语句在数据库里运行正常, 在内网测试正常,打包放外网的时候就报下面错误

    sql语句为: select t1.day as day , any_value(IFNULL(t2.avgNum,0)) as avgNum, any_value(IFNULL(t2.maxNum, ...

  10. java为什么要使用静态内部类

    参考:https://blog.csdn.net/fengyuyeguirenenen/article/details/122696650 static内部类意味着: (1) 为创建一个static内 ...