rogerujn 发表于 2022-11-27 10:12

openwrt+免驱摄像头+motion做监控不完美方案,求助完美解决办法。

本帖最后由 rogerujn 于 2022-11-27 17:02 编辑

    手头有一个免驱的摄像头,想着接在openwrt软路由上做监控,网上找了一些资料,照葫芦画瓢整了2天,实现了一个不太完美的方案。

参考的帖子有:
    华硕RT-N13U B1路由器OpenWrt固件操作备忘录(二)--摄像头篇_天际行游的博客-CSDN博客_cat /dev/video
    打造全自动监控系统OpenWrt+Motion+ffmpeg+msmtp+Mutt_senyooo的博客-CSDN博客_ffmpeg openwrt

————————————————————————————————————————————————————————————————
    需要安装的驱动模块有:
    kmod-video-gspca-core
    kmod-video-core
    kmod-video-uvc
    kmod-i2c-core
    kmod-input-core
————————————————————————————————————————————————————————————————
    软件:
    motion。第一个帖子中的mjpg-streamer如果用不到可以跳过,而且mjpg-streamer和motion不能同时运行。
    配置文件修改:
    打开/etc目录下的motion.conf 文件修改以下内容:
    daemon on 改为:daemon off //修改后可以不使程序后台运行,这样可以随时用ctrl+c终止程序运行,不然只能用 kill 15 XXX杀进程。
    videodevice /dev/video0 //如插有多个摄像头时,要将video0改为相应的视频设备名。
    v4l2_palette 17 //摄像头支持的视频模式,支持mjpeg的摄像头应把后边数字改为8。
    width 320 //水平分辨率,一般可设为352
    height 240 //垂直分辨率,一般可设为288
          //根据自己摄像头的情况调整,从小到大测试。
    framerate 2 //帧速。只是输出图片的话2就够了,后面会用到图片转视频,可以改成15。
    threshold 3000 //动态画面捕捉阈值,这里表示画面中像素点改变3000个以上就自动拍下一张照片。实测3000就很灵敏了。
    picture_output on //检测到动态画面后输出图像。
    picture_filename %v-%Y%m%d%H%M%S-%q //输出图片的文件名。
    movie_output off //我安装的motion不能直接调用ffmpeg,不能输出视频,所以改成off。
    target_dir /mnt/sda1/cam/jpg //自己创建修改照片保存路径。配置文件里可能没这个参数,自己加上就行。
    stream_port 8081 //视频流端口号,在电脑浏览中远程监控时,路由器IP后所跟的端口号。
    stream_localhost on //将on 改为off才能在电脑浏览器中进行监控。
    webcontrol_port 8080 //web控制端口,通过该端口连接路由器后可以通过浏览器对各项参数方便地进行设置。不能访问的话修改防火墙,第一个帖子有。
    webcontrol_localhost off //将on 改为off才能在电脑浏览器中访问控制面板。
————————————————————————————————————————————————————————————————
    程序运行:
    motion -c /etc/motion.conf
   以上可以实现捕捉到动态画面后输出图片。想要实现视频的输出要把ffmpeg和motion交叉编译,找到的帖子如下:
   关于motion监控软件,做个记录 - 教程方案专区 - OpenWrt中文网 - Powered by Discuz!
   奈何本人小白一名,没能力做到。网上找了很多资料,终于找到了本文开头提到的第二篇,实现了一个不完美方案。
————————————————————————————————————————————————————————————————
    安装ffmpeg,我的openwrt自带软件源有,并且会自动安装相关依赖,所以比较简单。如果没有软件源的话自己搜索一下安装方法吧。
    在motion配置文件中增加下面2条:
    on_event_start echo %Y%m%d'_'%H%M%S > /mnt/sda1/cam/detectedTime //记录事件监控时间重定向到文件,事件结束后会调用。路径自己创建修改。
    on_event_end 'ffmpeg -pattern_type glob -r 15 -i '/mnt/sda1/cam/jpg/%v'-'%Y%m%d%H*.jpg' -b:v 800k -s 640x480 /mnt/sda1/cam/mp4/%v'-'%C.mp4; cd /mnt/sda1/cam/mp4/; echo %v'-'%C.mp4 > /mnt/sda1/cam/latestMp4; cd /mnt/sda1/cam/jpg/; rm -f %v'-'%Y%m%d%H*.jpg' //监控事件结束后触发ffmpeg以每秒15帧,800k视频码率,640x480分辨率将事件的图片转换成视频,存储到指定文件夹,删除jpg零散文件。路径自己创建修改。
————————————————————————————————————————————————————————————————
    之所以不完美是因为视频是由图片转换而成,所以没有声音。
    在这里求高手帮忙交叉编译一个motion,可以实现motion内的视频输出。感谢!
    我的设备CPU是N3160,求帮忙。


飞天金猪 发表于 2022-11-28 23:11

人才,可以试下rtsp摄像机
页: [1]
查看完整版本: openwrt+免驱摄像头+motion做监控不完美方案,求助完美解决办法。