mjpg-stream测试框架运行与解读
mjpg-streamer是一个开源的V4L2测试框架,我们先来简单的运行一下看看效果,然后再具体分析实现的原理。
文章目录
- mjpg-stream程序运行
- mjpg-stream原理解读
- 整体结构
- 运行流程
- 源码分析
mjpg-stream程序运行
- 先去Github上,下载mjpg-streamer。下载地址:jacksonliam /mjpg-streamer
- 下载完成后,需要根据Github上Readme进行配置。首先安装cmake
sudo apt install cmake
- 安装libjpeg的开发版本,这里安装libjpeg8-dev,执行下面指令
sudo apt-get install cmake libjpeg8-dev
- 如果没有 gcc,以及用于 opencv 插件的 g++,则执行下面命令进行安装:
sudo apt-get install gcc g++
- 完成上述步骤后,进入到下载的mjpg-streamer中的mjpg-streamer-experimental文件夹下
cd mjpg-streamer-master/mjpg-streamer-experimental
然后依次执行
make clean all
sudo make install
- 执行启动程序
./start.sh
然后我们进入到8080端口,http://localhost:8080,进入Stream,就可以看到获取到的摄像头视频流。
这样我们就实现了mjpg-stream测试框架的运行,下面我们来具体的看一看,mjpg-stream是如何实现上述流程的。
mjpg-stream原理解读
mjpg-streamer是一个命令行应用程序,它能够从一个或多个输入插件中获取图像数据,并复制传输到多个输出插件中。它可用于通过基于IP的网络、Socket通信协议,将从摄像头获取到的视频流,传输到各种类型的查看器中,例如如Chrome,Firefox,Cambozola,VLC,mplayer和其他能够接收MJPG流的软件。
整体结构
其整体结构如下所示:
其中,
- plugins:其中主要包含input和output方法,提供usb摄像头的数据采集和传输的功能
- www:在使用浏览器浏览时的一些界面功能
运行流程
整个mjpg-stream运行的流程图如下图所示:
从上述流程图中可以看到,整体流程主要包括:
- 将硬件层USB摄像头采集到的数据,通过V4L2驱动,传递给采集模块Input_uvc.so
- 在数据处理层,通过压缩模块simplified_jpeg_encoder,将数据压缩成JPG图像数据
- 发送模块Output_httd.so,将JPG图像数据通过Socket协议传输至网络。
源码分析
下面来看一下源码,是具体如何实现上述步骤的。
源码的流程如下图所示:
1. V4L2接口和摄像头数据获取
在v4l2uvc.h中,可以看到通过封装了一个结构体vdIn,用来描述摄像头的一些信息,比如采集图片的宽高,图片的格式等等。
接着是把这个结构体写入驱动中,用来初始化摄像头。这个操作通过ioctl完成,涉及到的命令包括VIDIOC_QUERYCAP、VIDIOC_S_FMT、VIDIOC_S_PARM、VIDIOC_REQBUFS,VIDIOC_QUERYBUF,并通过mmap完成内存的映射。
最后我们通过ioct命令完成图片的读取,涉及到的命令包括VIDIOC_QBUF和VIDIOC_DQBUF。然后把获得的数据写入到文件里就是图片,通过网络传输出去连续的图片就是视频。
(具体的代码解读后续接着更新…)
mjpg-stream测试框架运行与解读相关推荐
- 【Pytest】选择测试框架运行脚本(unittest、pytest、Aotudetect、Nosetest…)
错误: pytest执行成功,但始终测试停留在页面登录首页,打印得日志也是主页登录得html,经查验,无语法错误,仅有第一次运行得时候,进行了一次传参,完成了传参参数得打印,之后得运行永远执行登录界面 ...
- unittest测试框架_python接口自动化测试 - 4.unittest单元测试框架学习
简介 unittest就是python的一个单元测试框架,unittest非常适合做自动化测试. 官方源码栗子: import unittestclass IntegerArithmeticTestC ...
- 动态模型之增压暂停【FunTester测试框架】
距离上次对FunTester测试框架功能规划之后,已经很久没有更新过功能规划了,主要因素是FunTester测试框架目前支持的功能已经完全满足工作需求.无论是分布式性能测试框架,还是全链路性能测试支持 ...
- Go:基于BDD的测试框架 Ginkgo 简介及实践
文章目录 简介 1. TDD 2. BDD 3. Ginkgo 一.Ginkgo实践 1. 安装Ginkgo 2. 使用 二.高级用法 1. 标志 2. 并发 3. goroutine 4. Desc ...
- Metasploit渗透测试框架简介
Metasploit渗透测试框架介绍 Metasploit是一个免费的.可下载的框架,通过它可以很容易地获取.开发并对计算机软件漏洞实施攻击.它本身附带数百个已知软件漏洞的专业级漏洞攻击工具.当H.D ...
- 【07节】Python3+Selenium4自动化 unittest 测试框架详解
文章目录 1.unittest 框架介绍 2.创建单元测试步骤 3.unittest 模块介绍 3.1 TestCase 类 3.1.1 TestCase 类常用方法: 3.1.2 TestCase ...
- unittest-单元测试框架
unittest-单元测试框架 源代码: Lib / unittest / __ init__.p (如果您已经熟悉测试的基本概念则可能要跳到assert方法的列表.) 该unittest单元测试框架 ...
- python自动化测试生成报告_使用python测试框架完成自动化测试并生成报告-实例练习...
练习一: 使用unittest 完成自动化测试并使用HttpTestRunner生成报告 ''' 1.写个简单的计算器功能,大小写转换功能,随机生成字符串功能 2.编写测试用例,不同的数据(你能想到的 ...
- python测试脚本实例-使用python测试框架完成自动化测试并生成报告-实例练习
练习一: 使用unittest 完成自动化测试并使用HttpTestRunner生成报告 ''' 1.写个简单的计算器功能,大小写转换功能,随机生成字符串功能 2.编写测试用例,不同的数据(你能想到的 ...
最新文章
- HtmlAgilityPack 总结(一)
- 红帽技术开放日:参与开源社区不只有贡献代码这一种方式
- 华为路由器 android,华为智能路由器app
- Oracle查询日期
- java keysetview,Set——你真的了解吗?
- python in memory_使用 in_memory 工作空间的注意事项
- 西门子v90伺服说明书_干货 | 西门子1200与V90伺服PROFINET通信故障解决方法
- scala的静态属性和静态方法
- mybatis 里面concat()函数t模糊查询
- 【python数据分析】亚太地区的商学院(商务与经济统计案例3-3)数据分析
- linux/windows对应的软件
- win7如何关闭uac
- 10分钟搭建你的云端微信机器人️️️
- 访客机如何应用于小区门禁?
- 商业虚拟专用网络技术十三 BGP/MPLS报文转发
- 幸福婚姻和睦家庭秘籍---包容与感恩
- nvm alias default [版本]不生效解决办法
- 单片机多电梯控制系统
- 计算机程序由算法,计算机程序算法试题.pdf
- 可视化大屏设计尺寸_Vue 大屏可视化-屏幕自适应(保持设计尺寸比例)
热门文章
- [MATLAB]用户界面设计工具(Callback函数实现)
- check_vintf compatibility_matrix version问题
- IOS 中微信 网页授权报 key[也就是code]失效 解决办法
- [转]SEO常用工具
- 前端js代码循环在页面中输出星星(很早之前代码以此记录-画星星)
- ARFoundation系列讲解 - 35 AR看车二
- 工业数据分析技术与实战之设备管理——昆仑数据田春华培训听课记录
- corona sdk android,在Corona SDK中为Android添加标记
- 中国羟丙基倍他环糊精行业研究与投资战略报告(2022版)
- 计算机视觉实验:边缘提取与特征检测