mjpg-streamer是一个开源的V4L2测试框架,我们先来简单的运行一下看看效果,然后再具体分析实现的原理。

文章目录

  • mjpg-stream程序运行
  • mjpg-stream原理解读
    • 整体结构
    • 运行流程
    • 源码分析

mjpg-stream程序运行

  1. 先去Github上,下载mjpg-streamer。下载地址:jacksonliam /mjpg-streamer
  2. 下载完成后,需要根据Github上Readme进行配置。首先安装cmake
    sudo apt install cmake
  3. 安装libjpeg的开发版本,这里安装libjpeg8-dev,执行下面指令
    sudo apt-get install cmake libjpeg8-dev
  4. 如果没有 gcc,以及用于 opencv 插件的 g++,则执行下面命令进行安装:
    sudo apt-get install gcc g++
  5. 完成上述步骤后,进入到下载的mjpg-streamer中的mjpg-streamer-experimental文件夹下
    cd mjpg-streamer-master/mjpg-streamer-experimental
    然后依次执行
    make clean all
    sudo make install
  6. 执行启动程序
    ./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运行的流程图如下图所示:
从上述流程图中可以看到,整体流程主要包括:

  1. 将硬件层USB摄像头采集到的数据,通过V4L2驱动,传递给采集模块Input_uvc.so
  2. 在数据处理层,通过压缩模块simplified_jpeg_encoder,将数据压缩成JPG图像数据
  3. 发送模块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测试框架运行与解读相关推荐

  1. 【Pytest】选择测试框架运行脚本(unittest、pytest、Aotudetect、Nosetest…)

    错误: pytest执行成功,但始终测试停留在页面登录首页,打印得日志也是主页登录得html,经查验,无语法错误,仅有第一次运行得时候,进行了一次传参,完成了传参参数得打印,之后得运行永远执行登录界面 ...

  2. unittest测试框架_python接口自动化测试 - 4.unittest单元测试框架学习

    简介 unittest就是python的一个单元测试框架,unittest非常适合做自动化测试. 官方源码栗子: import unittestclass IntegerArithmeticTestC ...

  3. 动态模型之增压暂停【FunTester测试框架】

    距离上次对FunTester测试框架功能规划之后,已经很久没有更新过功能规划了,主要因素是FunTester测试框架目前支持的功能已经完全满足工作需求.无论是分布式性能测试框架,还是全链路性能测试支持 ...

  4. Go:基于BDD的测试框架 Ginkgo 简介及实践

    文章目录 简介 1. TDD 2. BDD 3. Ginkgo 一.Ginkgo实践 1. 安装Ginkgo 2. 使用 二.高级用法 1. 标志 2. 并发 3. goroutine 4. Desc ...

  5. Metasploit渗透测试框架简介

    Metasploit渗透测试框架介绍 Metasploit是一个免费的.可下载的框架,通过它可以很容易地获取.开发并对计算机软件漏洞实施攻击.它本身附带数百个已知软件漏洞的专业级漏洞攻击工具.当H.D ...

  6. 【07节】Python3+Selenium4自动化 unittest 测试框架详解

    文章目录 1.unittest 框架介绍 2.创建单元测试步骤 3.unittest 模块介绍 3.1 TestCase 类 3.1.1 TestCase 类常用方法: 3.1.2 TestCase ...

  7. unittest-单元测试框架

    unittest-单元测试框架 源代码: Lib / unittest / __ init__.p (如果您已经熟悉测试的基本概念则可能要跳到assert方法的列表.) 该unittest单元测试框架 ...

  8. python自动化测试生成报告_使用python测试框架完成自动化测试并生成报告-实例练习...

    练习一: 使用unittest 完成自动化测试并使用HttpTestRunner生成报告 ''' 1.写个简单的计算器功能,大小写转换功能,随机生成字符串功能 2.编写测试用例,不同的数据(你能想到的 ...

  9. python测试脚本实例-使用python测试框架完成自动化测试并生成报告-实例练习

    练习一: 使用unittest 完成自动化测试并使用HttpTestRunner生成报告 ''' 1.写个简单的计算器功能,大小写转换功能,随机生成字符串功能 2.编写测试用例,不同的数据(你能想到的 ...

最新文章

  1. HtmlAgilityPack 总结(一)
  2. 红帽技术开放日:参与开源社区不只有贡献代码这一种方式
  3. 华为路由器 android,华为智能路由器app
  4. Oracle查询日期
  5. java keysetview,Set——你真的了解吗?
  6. python in memory_使用 in_memory 工作空间的注意事项
  7. 西门子v90伺服说明书_干货 | 西门子1200与V90伺服PROFINET通信故障解决方法
  8. scala的静态属性和静态方法
  9. mybatis 里面concat()函数t模糊查询
  10. 【python数据分析】亚太地区的商学院(商务与经济统计案例3-3)数据分析
  11. linux/windows对应的软件
  12. win7如何关闭uac
  13. 10分钟搭建你的云端微信机器人️️️
  14. 访客机如何应用于小区门禁?
  15. 商业虚拟专用网络技术十三 BGP/MPLS报文转发
  16. 幸福婚姻和睦家庭秘籍---包容与感恩
  17. nvm alias default [版本]不生效解决办法
  18. 单片机多电梯控制系统
  19. 计算机程序由算法,计算机程序算法试题.pdf
  20. 可视化大屏设计尺寸_Vue 大屏可视化-屏幕自适应(保持设计尺寸比例)

热门文章

  1. [MATLAB]用户界面设计工具(Callback函数实现)
  2. check_vintf compatibility_matrix version问题
  3. IOS 中微信 网页授权报 key[也就是code]失效 解决办法
  4. [转]SEO常用工具
  5. 前端js代码循环在页面中输出星星(很早之前代码以此记录-画星星)
  6. ARFoundation系列讲解 - 35 AR看车二
  7. 工业数据分析技术与实战之设备管理——昆仑数据田春华培训听课记录
  8. corona sdk android,在Corona SDK中为Android添加标记
  9. 中国羟丙基倍他环糊精行业研究与投资战略报告(2022版)
  10. 计算机视觉实验:边缘提取与特征检测