安防监控项目---mjpeg-streamer视频图像显示(实时视频流实现)

news2025/1/22 15:01:14

文章目录

  • 前言
  • 一、硬件准备和硬件设备的查询
  • 二、 jpeg库的移植
  • 2.1 源码下载
  • 2.2 jpeg库的移植
  • 三、mjpeg-stream的移植
  • 四、测试结果
  • 总结


前言

书接上期,我们已经实现了许多功能了,但是对于视频流的实时上传还未实现,本期主要分享的就是如何具体实现网页实时显示摄像头采集到的视频,从而实现安防中监控的功能,这个功能完成后呢,就只剩下一个功能需求了,那就是GPRS模块,能够实现危险报警的功能,也能够打电话警报;只有这些功能完全实现,我们才能完整的结束这个项目!下面来带大家看一下视频流信息究竟是如何一步步上传到网页的呢?

一、硬件准备和硬件设备的查询

首先呢,必须准备一个摄像头,哈哈哈,对头不!接下来教大家来看一下怎样查看摄像头的基本信息,如果是在Windows下,大家只需要把USB摄像头插入电脑的USB接口,显示的信息如下:
在这里插入图片描述
大家可以在这里进行查看摄像头的属性信息,主要是查看硬件ID,包括VID和PID,并且可以在UVC官方网站里面看一下是否支持这个摄像头;
如果大家直接插入到A9板子上,那么得看一下是否板子的内核支持,首先我们必须确定的是USB必须支持,紧接着查看设备节点目录下是否有该设备节点;
当插入摄像头的时候会显示以下信息:
在这里插入图片描述
在这里插入图片描述
并且大家也能够看到这里的ID号和Windows下的ID号是一致的!

紧接着查看设备节点:
在这里插入图片描述
哈哈哈,大家是不是还想看一下拔出是个啥情况,满足大家需求:
在这里插入图片描述
如果上述这些操作大家都正常,那么表示咱们的硬件环境已经搭建完成了,接下来需要做的就是进行软件实现视频流上传了;
大家一定要注意板子的内核一定得支持USB接口,要不然咱们插上摄像头是不会显示信息的,先配置内核,编译好内核后放在tftp目录下,板子启动后再插入;

二、 jpeg库的移植

又到了移植的环节了,本项目做到这里呢,已经是第三个移植了,从前两个移植中我们基本已经知道了移植其实就是将现成的接口标准库拿过来加入到自己的项目框架中,进行合理运用;

2.1 源码下载

源码的下载可以点击下面这个网站:http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_Page

2.2 jpeg库的移植

依旧是先下载,http://www.ijg.org/files/jpegsrc.v8b.tar.gz
紧接着解压缩,命令是

tar -xvf jpegsrc.v8b.tar.gz 

接下来配置源码,需要注意的是这里的./configure后面需要紧接着传参:

cd jpeg-8b 
./configure --prefix=自己指定一个目录  --host=arm-none-linux-gnueabi 
注意:--prefix表示最终生成的库和头文件等存放的目录,自己指定一个存在的路径就可以,
后面编译mjpeg-streamer的时候回用到,此处必须使用绝对路径,--host=arm-none-linux-gnueabi  --host表示生成的库的运行平台,
注意是两个 -  ,末尾不能加-./configure 之后为一行命令

这里提到了绝对路径,一般再移植的过程中我们都使用绝对路径,这样保证不会出错;因为毕竟是移植,如果设置为相对路径,移植后的目录已经发生了变化,也就意味着相对路径的相对基准已经发生了变化;还记得boa服务器的移植吗,如果不是移植再根目录下,而是在某一个路径下,那么配置boa.conf文件的时候就必须设置为绝对路径了;这个就是设置为绝对路径的优势!

接下来进行编译,make就行;
最后拷贝库文件到跟文件系统中:

sudo cp /home/fengjunhui/securitymonitor/mjpeg streamer/video/jpegarm/lib/* /home/fengjunhui/source/rootfs/lib

三、mjpeg-stream的移植

首先下载源码;svn cohttps://mjpg-streamer.svn.sourceforge.NET/svnroot/mjpg-streamermjpg-streamer
下载源码后进行解压:
在这里插入图片描述
这几个目录文件的作用如下:

doc mjpg-streamer udp_client 
mjpeg-client mjpg-streamer-experimental uvc-streamer 
mjpg-streamer :目录下提供了 的执行程序和各个输入输出设备组件 
uvc-streamer   : 目录下提供了 uvc-streamer的可执行目录 
mjpeg-client: : 分别有 linux和windows 的客户端
  1. 进入到mjpg-stream目录下
  2. 修改源码
vi ./plugins/input_uvc/Makefile
将CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC 
修改为
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /home/secure/mjpeg-streamer/video/jpegarm/include  (这个命令大家根据自己的路径来敲)

将(CC)(CFLAGS) -o @inputuvc.cv4l2uvc.lojpegutils.lodynctrl.lo(LFLAGS)
修改为
(CC)(CFLAGS) -L /home/fengjunhui/securitymonitor/mjpeg-streamer/video/jpegarm/lib –o @inputuvc.cv4l2uvc.lojpegutils.lodynctrl.lo(LFLAGS)
  1. 在mjpg-streamer-code-182/mjpg-streamer 目录下
编译:make CC=arm-linux-gcc 
在mjpg-streamer生成了 
input*.so output*.so 和 mjpg_streamr 可执行文件 
小问题:
make CC=arm-linux-gcc
make: svnversion: Command not found     
  解决方案:sudo apt-get install subversion
  	 安装之前先更新一下软件包的源和依赖:
  	Sudo apt-get update              更新软件源
  	Sudo apt-get -f   install         更新依赖
再次编译:
make
Nothing to be done for `all'.
先
make clean,
然后再
make CC=arm-linux-gcc
查看生成的库和可执行的文件: 
fengjunhui@ubuntu:~/securitymonitor/mjpeg-streamer/mjpg-streamer-code-182/mjpg-streamer$ ls *.so
input_file.so         input_uvc.so    output_http.so
input_testpicture.so  output_file.so  output_udp.so
ls mjpg_streamer
mjpg_streamer
  1. 移植到开发板
mkdir    /home/fengjunhui/source/rootfs/mjpg-streamer (你的根文件系统目录)
cp   *.so    /home/fengjunhui/source/rootfs/mjpg-streamer  -arf
cp   mjpg_streamer  /home/fengjunhui/source/rootfs/mjpg-streamer  -arf

将源码目录中的start.sh和目录www拷贝到~/source/rootfs/mjpg-streamer/目录下,然后就可以测试啦 
sudo   cp start.sh   www/    ~/source/rootfs/mjpg-streamer/ -arf

四、测试结果

先打开开发板把内核跑起来,内核必须支持USB,并且对摄像头也有一定的要求,这里需要给大家说仔细了,上面说到的设备号必须在http://www.ideasonboard.org/uvc/网站里面,但是经过我的实测发现,如果其他移植过程都没有问题,并且运行start.sh脚本也没有问题,或者有以下问题:

ERROR opening V4L interface: No such file or directory
 Init v4L2 failed !! exit fatal 
 i: init_VideoIn failed
MJPG-streamer [1296]: init_VideoIn failed

那么大家都可以打开start.sh文件,在以下处进行更改:
请添加图片描述
紧接着在A9开发板运行BOA服务器,直接进入视频流文件夹下运行start.sh脚本,那么可以观测到以下现象:
请添加图片描述
在这里插入图片描述
以上两张图片就是在网页上显示的视频中午截图所得,视频还是比较模糊的,但是实测了一下离近一点会清晰一点,摄像头用的还是比较便宜哈!


总结

本期的分享就到这里结束了,本期的这些过程如果大家一步步做下来的话,大家会发现遇到的问题还是不少的,但是问题永远是存在的,有时候是硬件设备不匹配,有时候是软件不支持,所以选型就是一个非常重要过程;希望大家还是能够根据自己的项目找到合适的选型;最后,各位小伙伴们如果有收获,可以点赞收藏哦,你们的认可是我创作的动力,一起加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅述青犀AI算法人体攀爬行为检测的应用场景及解决方案

人体攀爬行为检测是指利用计算机视觉技术对人类攀爬物体的行为进行识别和分析。该技术主要依靠图像和视频数据进行分析,通过识别人类身体的各个部位,以及其在攀爬过程中的动作和姿态,实现对攀爬行为的检测和跟踪。该技术的场景应用比较广泛&a…

Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置(亲测可行)

转自 Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置(亲测可行)_mac zsh-CSDN博客 以下都是苹果 设置,这是简化版的,详细的看我引用的 个性化终端颜色背景设置 显示检查器 打开终端,鼠标在终端中,右击&…

妙手ERP本期功能更新:TikTok支持自定义SKU规格、Temu支持创建尺码表、仓库库存可同步至Shopee全球产品 ......

为了给卖家朋友带来更好的使用体验,更高效地运营跨境店铺,妙手ERP在上周优化了以下多项功能。 01、产品模块优化 全平台 - 插件采集支持批量采集速卖通产品 - 店铺互踩、店铺产品增加销量筛选项 - 公用采集箱支持编辑产品父SKU、AI生成、SKU规格、尺码…

基于单片机设计的自动门控制系统

一、项目介绍 随着科技的不断发展,自动门成为公共场所、商业建筑和住宅社区等地的常见设施。自动门的出现使得进出门的操作更加便捷,提高了人们的生活质量和工作效率。为了实现自动门的开关控制,本项目基于单片机设计了一套自动门控制系统。…

Mac PS2023/2024储存窗口黑屏不显示 解决方法

mac 版本ps2023,存储为窗口突然显示为空白了,没有任何文字按钮,尝试过重启软件、重启电脑、重新安装、电脑系统更新,皆没有效果。 仅ps2023有这个bug,其他操作正常。 具体步骤: 1.打开finder, 先点击左边文稿, 再点击…

二维码智慧门牌管理系统:让房屋管理变得轻松高效!

文章目录 前言一、六实数据管理应用,让管理更精准二、快速导入导出,提升工作效率三、科技助力,让生活更美好四、适用广泛,满足各类需求 前言 随着科技的飞速发展,传统的房屋管理方式已经无法满足现代社会的需求。为了…

【Python语言】字符串的使用方法总结

目录 1、字符串的基本知识 2、字符串的常用操作 2.1 查找特定字符串的下标索引值 2.2 字符串的替换 2.3 字符串的分割 2.4 字符串的规整操作 2.5 统计字符串中某个字符串出现的次数 2.6 统计字符串的长度 3、字符串的遍历 3.1 while循环 3.2 for循环 1、字符串的基本…

cocosCreator微信小游戏 之 获取用户昵称、头像等信息(二)

版本: 3.4.0 语言: TypeScript 环境: Mac 简介 在上篇博客中,主要讲述内容:wx API在cocosCreator中配置定义文件和微信后台配置用户隐私相关。 讲述的主要原因是: cocosCreator没有对 wx API提供定义接…

链表的中间结点

题目表述 给你单链表的头结点 head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 这道题的思路是快慢指针,具体来说就是定义两个指针,一快一慢,快指针一次走两步,慢指针一次…

【每日一题】填充每个节点的下一个右侧节点指针 II

文章目录 Tag题目来源题目解读解题思路方法一:BFS 其他语言python3 写在最后 Tag 【BFS】【树】【2023-11-03】 题目来源 117. 填充每个节点的下一个右侧节点指针 II 题目解读 为二叉树中的每一个节点填充下一个节点。 解题思路 方法一:BFS 本题题目…

C 语言左移位操作在kernel驱动子系统中的特殊用途

文章目录 前言一、C语言左移位操作介绍1. 左移位二、左移位操作在kernel 驱动子系统中的应用1. 左移位操作在 V4L2, Media 子系统中的应用实例2.左移位操作在 DRM 子系统中的应用实例2.1 左移位操作在struct drm_crtc 中的应用2.2 左移位操作在struct drm_encoder 中的应用总结…

thinkphp6 入门(11)-- 模板标签

新版框架默认只能支持PHP原生模板,如果需要使用thinkTemplate模板引擎,需要安装think-view扩展(该扩展会自动安装think-template依赖库)。 composer require topthink/think-view配置文件 安装完成后,在配置目录的vi…

[AUTOSAR][诊断管理][ECU][$3E] 测试设备在线|会话保持

文章目录 一、简介二、服务请求报文定义三、肯定响应四、支持的NRC四、示例步骤(1)supportPosRspMsgIndicationBit=0(2)supportPosRspMsgIndicationBit=1三、示例代码3e_test_present.c一、简介 这个服务的目的是确保诊断服务或者之前激活的通信还处在激活的状态,可以保持…

批量压缩图片大小的绝妙技巧,让你的图片更轻盈

在制作幻灯片演示时,经常需要插入图片作为视觉辅助,通过批量缩小图片大小,可以减小演示文件的大小,方便共享和传输。 那么怎么将图片缩小成了问题的关键,市面上不少方法都是需要通过下载软件来处理图片的,…

自动驾驶高效预训练--降低落地成本的新思路(ReSimAD)

自动驾驶高效预训练--降低落地成本的新思路 1. 引言定义高效预训练 2. ReSimAD2.1引言2.2 主要贡献1.发布大规模ReSimAD数据2.ReSimAD pipeline 2.3 实验 上海人工智能实验室 1. 引言 高效的预训练,是大模型的第一步 大模型的两种能力 海量数据分布–未知场景泛化…

MySQL TIMESTAMPDIFF函数的使用场景

TIMESTAMPDIFF函数在MySQL中用于计算两个日期或时间之间的差异,并以指定的单位返回结果。这个函数特别适用于需要计算时间差或者对日期和时间进行操作的场景。 以下是一些TIMESTAMPDIFF函数的使用场景示例: 源表employees 计算两个日期之间的天数差异&a…

【LeetCode刷题-链表】--82.删除排序链表中的重复元素II

82.删除排序链表中的重复元素II 由于链表是排好序的,所以只需要对其进行一次遍历即可,比较相邻节点对应的值 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(…

Unity3D与iOS的交互 简单版开箱即用

本文适合的情况如下: Unity客户端人员 与 IOS端研发人员合作的情况 目录 From U3D to iOS 实现原理 1.unity工程目录创建2个文件 NativeCallProxy.m、NativeCallProxy.h 并且放到Unity工程目录Plugins/iOS/unity_ios_plus目录下 2.创建C#调用脚本 定义对应.mm脚…

STM32:I²C通信原理概要

一、IIC通信原理 IIC通信和串口通信有一定的相似之处,都有一根共地线和两根数据线。但是传递外部信息,串口有两根数据线可以进行双向通信,也就是全双工通信。而在IIC通信下,其中一条数据线是用于提供同步时钟脉冲的时钟线(SCL)&am…