前期内容提要:
在完成网络摄像头的前期准备之后,从这一章开始将正式进入工程。关于监控画面的传输,网络上相关文章已经很多了,但实践起来往往仅在局域网环境下拥有较好的用户体验,针对需要内网穿透的mjpg-stream配置方法尚未有系统化归纳。
因此这篇文章在实现监控画面传输的同时,也会带大家排排那些mjpg-stream存在的坑。
在将摄像头连接树莓派后前往raspi-config开启服务:
sudo raspi-config
sudo reboot
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/
cd mjpg-streamer/mjpg-streamer-experimental/plugins/input_uvc
sudo chmod 7777 input_uvc.c
vim input_uvc.c
如下图开启
帧率自适应[-softfps]
,将屏幕分辨率调至352*288
。经测试(50M宽带环境),这在后续穿透视频画面后能有较好的体验。
cd mjpg-streamer/mjpg-streamer-experimental/
make all
sudo make install
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"
参数 | 说明 |
---|---|
./Mjpg_streamer | 执行主程序 |
-i | 输入(input) |
input_uvc.so | UVC输入组件 |
-o | 输出(output) |
output_http.so | 网页输出组件 |
-w ./www | 网页输出(默认端口8080) |
在局域网内获取动态图像:
在局域网内获取静态图像:
在确认传输画面清晰无误后,我们将监控画面的传输服务设置为开机自启,以便后续其他操作。
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
经测试,关于视频分辨率、帧率自适应等一系列参数变更的方式,现无法直接通过启动命令定义。
./mjpg_streamer -i "./input_uvc.so –r 352x288 –softfps 3" -o "./output_http.so -w ./www"
可以看到返回的视频分辨率并未改变,因此如果还有其他参数需要修改,建议统一按照上文的修改方式(编辑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
#重启ssh服务
sudo systemctl restart ssh
#为root用户应用于当前用户相同的bash配置
sudo cp ~/.bashrc /root/.bashrc
在完成上述工作之后,我们已经基于mjpg-stream实现了监控画面的传输,这一需求实现起来很简单,故不再多述了,如果您有任何疑问或者好的建议,欢迎留言评论!
后期内容提要: