mjpg-streamer使用介绍

2023-12-12 07:38
文章标签 使用 介绍 mjpg streamer

本文主要是介绍mjpg-streamer使用介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前几天自己没事玩了一下mjpg-streamer,感觉还不错,这里结合网上的一些资料和自己的心得把主要步骤贴出来供大家参考一下:

ps:我在ubuntu11.10和12.04里面都是过,按照以下步骤都没什么问题,我的内核版本是3.2.0的,摄像头使用的是ZC0301PL,开发板是杂牌的,ARM11,核心芯片是S3C6410。PC上也是可以运行的,并不一定非要使用开发板,根据需要修改一下Makefile就可以了。

Linux内核采用Linux 2.6.32版本,运行make menuconfig配置万能驱动USB摄像头,在Device Drivers下,选择Multimedia device,选择Video Capture adapters,选择V4L USB devices,选择GSPA based webcams,即可选择万能驱动USB摄像头。

    系统采用Yaffs文件系统,Yaffs是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。它减少了一些功能,速度更快,挂载时间很短,对内存的占用较小,所以系统采用Yaffs文件系统。

    MJPG-streamer是一款免费基于IP地址的视频流服务器,它的输入插件从摄像头读取视频数据,这个输入插件产生视频数据并将视频数据复制到内存中,它有多个输出插件将这些视频数据经过处理,其中最重要的输出插件是网站服务器插件,它将视频数据传送到用户浏览器中,MJPG-streamer的工作就是将其中的一个输入插件和多个输出插件绑定在一起,所有的工作都是通过它的各个插件完成的。MJPG-stream er源码包可从SourceForge网站下载使用。各个文件如下:

    (1)input_testpicture.so。这是一个图像测试插件,它将预设好的图像编译成一个头文件,可以在没有摄像头的情况下传输图像,从而方便调试程序。

    (2)input_uvc.so。此文件调用USB摄像头驱动程序V4L2,从摄像头读取视频数据。

    (3)input_control.so。这个文件实现对摄像头转动的控制接口。

    (4)output_http.so。这是一个功能齐全的网站服务器,它不仅可以从单一文件夹中处理文件,还可以执行一定的命令,它可以从输入插件中处理一幅图像,也可以将输入插件的视频文件根据现有M-JPEG标准以HTTP视频数据服务流形式输出。

(5)output_file.so。这个插件的功能是将输入插件的JPEG图像存储到特定的文件夹下,它可以用来抓取图像。

将MJPG-streamer视频流服务器移植到目标板上运行,从而可以实现网络视频数据的采集,具体移植过程:

    (1)首先移植MJPG-streamer依赖的jpeg库。在/usr/local目录下解压源码包tar xvzf jpegsrc.v8b.tar.gz。

    (2)修改配置文件./configure--prefix=/usr/video/jpeg--host=arm-linux-gnueabi,编译:make,安装:make install,最后将/usr/local/video/jpeg/lib目录下的libjpeg.so.8文件拷贝到文件系统中的lib目录下。

    (3)解压源码包:tar zxvf mjpg-streamer.tar.gz;

    (4)修改源码:修改顶层Makefile及plugins目录中的各级Makefile将所有CC=gcc修改为CC=arm-linux-gcc。修改/usr/local/mjpg-streamer-r63/plugins/input_uvc目录下的Makfile文件,在CFLAGS+=-O2-DLINUX-D_GNU_SOURCE-Wall-shared-fPIC后加上I//usr/loc al/video/jpeg//include,把$(CC)$(CFLAGS)-ljpeg-o$@input_uvc.c v412uvc.lo jpeg_utils.lodynctrl.lo代码修改为$(CC)$(CFLAGS)-ljpeg-L/usr/local/video/jpeg/lib-o$@input_uvc.c v412uvc.lojpeg_utils.lo dynctrl.lo,从而加载前面编译安装的jpeg库文件,使得MJPG-streamer能够调用到jpeg库。

    (5)交叉编译:make CC=arm-linux-gcc,交叉编译器为arm-linux-gcc4.3.2,生成arm板可执行的二进制文件。

将应用程序通过超级终端工具传输到arm板上,设置视频服务器应用程序start_uvc.sh开机启动,将交换机引出的双绞线通过RJ-45接口连接到ARM板,在超级终端下进入ARM板,用ifconfig命令配置服务器相应网段的IP地址,将板子上电之后即可执行视频采集程序。从客户端浏览器输入arm板IP地址发出访问请求,服务器接收到请求后与客户端建立连接,将视频数据发送到客户端监听端口,客户端就可以得到连续的现场现场画面,从而实现网络视频采集功能。

 结束语

    随着互联网的不断发展,视频信息采集进入到一个新的时代,本系统设计基于S3C2440的高速信息处理能力和丰富的硬件接口,在网络功能强大的Linux操作系统平台下,移植MJPG-streamer视频流服务器,模块结构清晰,易于管理,利用现有网络资源,很容易实现远程的网络视频采集,克服了现有视频采集的距离问题,开发简单,可移植性高,并且系统运行稳定。

    系统改进思路:无线局域网WLAN成为无线通信使用热点,通过移植WIFI模块可以实现无线网络视频采集,从而摆脱网线的限制,更加方便使用,在MJPG-streamer软件中有一个input_control.so的输入插件没有用到,加上该插件可以实现摄像头的位置的控制,比如自动跟踪的功能,另外可以加入智能模式识别算法,从摄像头读取的视频信息识别物体,辨别出人、动物、汽车等物体,从而是系统功能更加强大。


最新版本的配合最新的libjpeg使用,较老版本的如股票运行的时候报错invalid argument说明libjpeg的版本不对,需要下载62版本的jpeg库文件,不过好像这个错误并不影响运行。建议使用最新的mjpg-streamer和jpeg库文件配合使用。



这篇关于mjpg-streamer使用介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483794

相关文章

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali