【树莓派-网络监控(2)画面传输】基于mjpg-stream实现监控画面的传输


前期内容提要:

  • 【树莓派-网络监控(1)分析准备】基于树莓派搭建可视化可远程遥控网络监控——工程分析及前期准备

在完成网络摄像头的前期准备之后,从这一章开始将正式进入工程。关于监控画面的传输,网络上相关文章已经很多了,但实践起来往往仅在局域网环境下拥有较好的用户体验,针对需要内网穿透的mjpg-stream配置方法尚未有系统化归纳。

因此这篇文章在实现监控画面传输的同时,也会带大家排排那些mjpg-stream存在的坑。


一、开启摄像头服务

在将摄像头连接树莓派后前往raspi-config开启服务:

sudo raspi-config

【树莓派-网络监控(2)画面传输】基于mjpg-stream实现监控画面的传输_第1张图片

sudo reboot
二、安装MJPG-streamer及相应依赖
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install subversion libjpeg8-dev imagemagick libv4l-dev cmake git
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental/
三、修正MJPG-streamer配置(无外网访问需求的可跳过此步骤)
cd mjpg-streamer/mjpg-streamer-experimental/plugins/input_uvc
sudo chmod 7777 input_uvc.c
vim input_uvc.c

如下图开启帧率自适应[-softfps],将屏幕分辨率调至352*288。经测试(50M宽带环境),这在后续穿透视频画面后能有较好的体验。

【树莓派-网络监控(2)画面传输】基于mjpg-stream实现监控画面的传输_第2张图片

四、编译(每次修改配置文件后都需要重新操作此步骤)
cd mjpg-streamer/mjpg-streamer-experimental/
make all
sudo make install

【树莓派-网络监控(2)画面传输】基于mjpg-stream实现监控画面的传输_第3张图片

五、开启摄像头测试
cd mjpg-streamer/mjpg-streamer-experimental/

普通的免驱动USB摄像头,执行命令(本文准备的是USB摄像头):

./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"

如果是使用的Picamera摄像头,则使用命令:

./mjpg_streamer -i "./input_raspicam.so" -o "./output_http.so -w ./www"

【树莓派-网络监控(2)画面传输】基于mjpg-stream实现监控画面的传输_第4张图片

参数 说明
./Mjpg_streamer 执行主程序
-i 输入(input)
input_uvc.so UVC输入组件
-o 输出(output)
output_http.so 网页输出组件
-w ./www 网页输出(默认端口8080)
六、查看监控画面的传输效果

在局域网内获取动态图像:

  • http:// 树莓派IP:8080/?action=stream(推荐)
  • http:// 树莓派IP:8080/javascript_simple.html

在局域网内获取静态图像:

  • http:// 树莓派IP:8080/?action=snapshot
    【树莓派-网络监控(2)画面传输】基于mjpg-stream实现监控画面的传输_第5张图片
七、实现开机后台自启

在确认传输画面清晰无误后,我们将监控画面的传输服务设置为开机自启,以便后续其他操作。

sudo vim /etc/systemd/system/camera.service
[Unit]
Description=camera daemon
After=syslog.target  network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/home/pi/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer -i "/home/pi/mjpg-streamer/mjpg-streamer-experimental/input_uvc.so" -o "/home/pi/mjpg-streamer/mjpg-streamer-experimental/output_http.so -w /home/pi/mjpg-streamer/mjpg-streamer-experimental/www"
Restart= always
RestartSec=1min

[Install]
WantedBy=multi-user.target
#启动监控画面的传输
systemctl daemon-reload
systemctl start camera

#查看是否成功开启
systemctl status camera.service

#设置为开机启动
systemctl enable camera

【树莓派-网络监控(2)画面传输】基于mjpg-stream实现监控画面的传输_第6张图片


八、最后聊聊mjpg-stream存在的一些坑

经测试,关于视频分辨率、帧率自适应等一系列参数变更的方式,现无法直接通过启动命令定义。

./mjpg_streamer -i "./input_uvc.so –r 352x288 –softfps 3" -o "./output_http.so -w ./www"

【树莓派-网络监控(2)画面传输】基于mjpg-stream实现监控画面的传输_第7张图片
可以看到返回的视频分辨率并未改变,因此如果还有其他参数需要修改,建议统一按照上文的修改方式(编辑mjpg-streamer/mjpg-streamer-experimental/plugins/input_uvc/input_uvc.c文件)进行修改。

此外,对于不熟悉vi编辑器的用户可以选择本地编辑完成后通过WinSCP上传至树莓派指定目录:

我也会在这篇博客上上传一份已经配置完成的input_uvc.c文件,以供大家直接使用。

但是树莓派初次登陆WinSCP会因为没有权限致使访问被拒绝。

  • 解决方法:
sudo passwd root
sudo passwd --unlock root #启用root

如果报错:passwd: password expiry information changed.则是ssh默认关闭了root登陆。

vi /etc/ssh/sshd_config
PermitRootLogin yes #值更改为yes

【树莓派-网络监控(2)画面传输】基于mjpg-stream实现监控画面的传输_第8张图片

#重启ssh服务
sudo systemctl restart ssh

#为root用户应用于当前用户相同的bash配置
sudo cp ~/.bashrc /root/.bashrc

在完成上述工作之后,我们已经基于mjpg-stream实现了监控画面的传输,这一需求实现起来很简单,故不再多述了,如果您有任何疑问或者好的建议,欢迎留言评论!


后期内容提要:

  • 【树莓派-网络监控(3)角度遥控】基于python3控制两自由度舵机,实现摄像头拍摄角度的遥控
  • 【树莓派-网络监控(4)数据交互】基于python异步io框架Tornado,实现监控遥控命令与Web网页触发事件的绑定及前后端的数据交互
  • 【树莓派-网络监控(5)前端搭建】基于iframe标签,集成监控实时画面与遥控功能,制作并优化响应式控制页面
  • 【树莓派-网络监控(6)远程访问】基于内网穿透实现树莓派监控的公网远程访问与遥控

你可能感兴趣的:(★,工程实战,★,Raspberry)