详解移植mjpg_streamer到arm板

2023-11-19

介绍:
Mjpg‐streamer是一个开源软件,用于从webcam摄像头采集图像,把它们以流的形式通过基于ip的网络传输到浏览器如Firefox,Cambozola,VLC播放器,Windows的移动设备或者其他拥有浏览器的移动设备.
mjpg - streamer  可以通过文件或者是HTTP方式访问linux UVC兼容摄像头。
—————————————————————————————————————————————————
本文作一个移植记录。
前天买了个优迈Q5 USB摄像头,准备用来做毕业设计,需要移植mjpg_streamer。昨天在移植的时候折腾了一下,现在已成功移植到九鼎x210板子(S5PV210)上,能够在ubuntu下的火狐浏览器打开摄像头采集画面,下面开始记录移植过程。
—————————————————————————————————————————————
一、环境
主机环境:ubuntu14.04
目标机:九鼎创展科技的x210开发板(S5PV210)
主机工具链:gcc-4.8.2
交叉工具链:arm-none-linux-gnueabi-gcc-4.4.1
用一个软连接“arm-linux-gcc”指向它,下面有参数会用到它
____________________________________________________________________________________________________________
二、移植过程 
1、配置内核是内核支持UVC格式的摄像头 (其实默认支持UVC,它是标准协议), 最后一步时根据自己需要进行选择摄像头配置。

Device Drivers  --->

               <*> Multimedia support  --->

                         [*]   Video capture adapters  --->

                                [*]   V4L USB devices  ---> 
                                         <*>   USB Video Class (UVC)

                                          [*]     UVC input events device support        

2、重新编译arm板的内核 ,烧录到板子,启动后 将USB摄像头插进板子串口有信息自动弹出时,即识别成功。
make -j2

3、mjpg-stream的移植 
mjpg-stream的资料可以在下面这个网址查看(全英文): http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_Page  
mjpg-stream最新版下载 网址是: http://mjpg-streamer.svn.sourceforge.net/viewvc/mjpg-streamer/  ,
(进去后,点右上的“Download Snapshot”下载最新版的 mjpg-streamer-code-182,因为旧版编译时会出现缺少一个头文件的错误)
mjpg-stream的移植需要jpeg的库,所以我们先移植jpeg的库 ,即需要libjpeg
第一步:jpeg库的移植 
1)jpeg源码包通过下面这个网址下载 
http://www.ijg.org/files/jpegsrc.v8b.tar.gz  
2)解压源码包 
tar xvf jpegsrc.v8b.tar.gz 
3)配置源码 ,下面的配置很重要,自行定义jpeg安装目录(得先创建那 文件夹), 并使用交叉工具链编译jpeg库(要不然会出现编译mjpg_streamer的input_uvc.o时找不到兼容的ljpeg错误!)
cd jpeg-8b ,在命令行分别输入下面命令配置:
./configure --prefix= /usr/local/src/out_jpeg -host=arm-none-linux-gnueabi 
./configure CC=arm-linux-gcc --prefix= /usr/local/src/out_jpeg -host=arm-none-linux-gnueabi
4)编译 
make 
5)安装 ,执行 make install  命令后,在上面配置的 /usr/local/src/out_jpeg 文件夹中便出现了一些文件夹,包括bin、includelib、share,红色这两个文件夹便是mjpg_streamer需要的。
6)拷贝上面的lib文件夹即jpeg库到文件系统中 
cp /usr/local/src/out_jpeg/ lib  /root/rootfs/rootfs/lib -rf
( /root/rootfs/rootfs 此目录为自己的文件系统目录,arm板是挂载ubuntu中此目录作为根文件系统的)
第二步、移植mjpg-streamer 
1、将下载 最新版本的 源码 解压至 /usr/local/src/ ,目录 mjpg-streamer-code-182 里内容如下:
doc 
mjpg-streamer 
udp_client 
mjpeg-client
mjpg-streamer-experimental 
uvc-streamer 
————————部分说明:
mjpg-streamer :目录下提供了 的执行程序和各个输入输出设备组件 
uvc-streamer : 目录下提供了 uvc-streamer的可执行目录 
mjpeg-client:: 分别有 linux和windows 的客户端 
————————
2、进入目录 
cd mjpg-streamer 
3、(1)修改源码 顶层的Makefile及 plugins文件夹里面所有子层的Makefile中的CC参数为arm-linux-gcc,即将所有“ CC = gcc ”改为“ CC = arm-linux-gcc ”,哈哈,不得不花上几分钟去修改。
(2)进入 /plugins/input_uvc/Makfile , 
修改 
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC 
为 
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I  /usr/local/src/out_jpeg /include 
修改 
(CC)(CFLAGS) -o @inputuvc.cv4l2uvc.lojpegutils.lodynctrl.lo(LFLAGS) 
为 
(CC)(CFLAGS) -L   /usr/local/src/out_jpeg /lib -o @inputuvc.cv4l2uvc.lojpegutils.lodynctrl.lo(LFLAGS) 
(注:/usr/local/src/out_jpeg/lib 就是上面移植jpeg库后安装的目录,根据自己设置的目录来修改) 
这样,mjpg_streamer就和jpeg库绑定了。

4、编译:make (make clean为清除编译)
 在mjpg-streamer目录下生成了  input*.so、 output*.so 和 mjpg_streamer 可执行文件 

5、在开发板挂载的ubuntu文件系统目录中(本人为/root/rootfs/rootfs)建立mjpg-streamer安装目录 
mkdir  /root/rootfs/rootfs /mjpg-streamer 
再将源码目录 mjpg-stream整个 拷贝到 /root/rootfs/rootfs /mjpg-streamer目录下,然后就可以 测试 啦 
cp mjpg-stream  /root/rootfs/rootfs /mjpg-streamer -rf
6、测试
(启动arm板,板子应设置好环境变量,让arm板通过tftp下载内核和挂载好ubuntu中的自制作文件系统)
启动后,插进USB摄像头,进入板子的 mjpg-streamer  目录,
执行 ./start.sh
若没有出现错误,则在PC机打开一个网页,输入 http://192.168.1.20:8080/?action=stream 就可以看到图像。 
(ip为arm板的ip)
————————————————移植完毕————————————————————————
若出现下面错误:
Unable to set format: Invalid argument
 Init v4L2 failed !! exit fatal
 i: init_VideoIn failed


错误原因:
市面上大部分摄像头都是支持YUV的,而不是JPEG的。mjpg-stream支持JPEG和YUV两种格式。

解决方法:

[fire@fire mjpg-streamer]$ cd mjpg-streamer/plugins/input_uvc/
[fire@fire input_uvc]$ vi input_uvc.c

int input_init(input_parameter *param, int id)
{
    char *dev = "/dev/video0", *s;
    int width = 640, height = 480, fps = -1, format = V4L2_PIX_FMT_MJPEG, i;

    
    if(pthread_mutex_init(&cams[id].controls_mutex, NULL) != 0) {
        IPRINT("could not initialize mutex variable\n");
        exit(EXIT_FAILURE);
    }
.......................

将上面红色代码改为:format = V4L2_PIX_FMT_YUYV

以上就设置了默认的图像格式,重新在顶层把模块编译,再次cp mjpg-stream /root/rootfs/rootfs/mjpg-streamer -rf ,arm板重启后就成功了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

详解移植mjpg_streamer到arm板 的相关文章

  • 一些常见BootLoader介绍

    首先区分一下BootLoader和Monitor的概念 严格来说 BootLoader只是引导设备并且执行主程序的固件 而Monitor还提供了更多的命令行接口 可以进行调试 读写内存 烧写Flash 配置环境变量等 Monitor在嵌入式
  • Qt自定义界面类并提升(提升的窗口部件)

    1 用Qt Creator新建一个自定义Widget 类名自定义为 QMyForm 2 在Qt Creator自带的设计师里面 把普通的Wiget提升为自定义的QMyForm 选择菜单 提升为 3 手动输入提升的类名 QMyForm 然后点
  • [lightm显示]ubuntu卡在启动界面

    解决lightdm刚下载 重启电脑ubuntu卡在紫色启动界面 1 重启电脑 2 进入恢复模式下的root 3 命令行输入 4 命令行输入reboot 环境 ubuntu20 04 解决 把显示管理器重新改回gdm3即可 1 重启电脑 2
  • 知识图谱之知识融合

    最近在 小象学院 上知识图谱的课程 做了一些笔记 现整理了一下 1 什么是知识融合 将来自不同知识库的同一实体融合在一起 目标 融合各层面的知识 合并两个知识图谱 本体 需要确认的是 1 等价实例 实体的匹配 左右两个人是同一个人 sams
  • 在python中使用pyspark读写Hive数据操作 --转载

    1 读Hive表数据 pyspark读取hive数据非常简单 因为它有专门的接口来读取 完全不需要像hbase那样 需要做很多配置 pyspark提供的操作hive的接口 使得程序可以直接使用SQL语句从hive里面查询需要的数据 代码如下
  • Intent.addFlags() 启动Activity的20种flags

    前言 在使用startActivity时候出现异常 Caused by Android util AndroidRuntimeException Calling startActivity from outside of an Activi
  • STL之set常见用法详解

    摘自胡凡的 算法笔记 仅作记录用 前言 set是一个内部自动有序且不含重复元素的容器 如果要使用set 需要添加set头文件 即 include
  • JavaFX打包为exe文件

    JavaFX打包为exe文件 传统的Java打包为exe文件是先打包成 jar的可执行文件 再用exe4j打包为exe文件 可以参考Java项目打包成exe的详细教程 Jepson6669 博客园 cnblogs com 该方法较为繁琐 而
  • 机器学习之集成学习(实验记录)

    集成学习实验任务 一 实验目标 二 实验内容 三 实验任务及步骤 四 实验总结 一 实验目标 了解集成学习的基本结构 训练方法 实现方法 并通过随机森林与Adaboost算法加深理解 二 实验内容 概念 集成学习 Ensemble lear
  • C++ 一个类访问另一个类的私有成员和保护成员

    友元类 class A friend class B private int aa class B public void output cout lt lt a aa lt lt endl private A a 使用友元类时注意 1 友
  • 前端开发行业真的会被AI取代吗?

    作者 殷圣魁 来源 58架构师 ID architects 58 前言 相信不少人看过一篇人工智能已经能实现自动编写HTML CSS的文章 人工智能开始取代前端的一部分工作 前端开发行业真的被人工智能取代吗 人工智能发展确实速度惊人 但是前
  • 微信开工具报getLocation:fail, the permission value is offline verifying

    解决办法是 部署到服务器就能获取到了
  • 知道用户画像标签有哪些维度、应用场景体系?是种什么样的体验

    相关文章 用户画像 3种标签类型 8大系统模块 用户运营 怎么分析用户活跃 指标波动 用户分析 店铺数据分析 小程序数据分析 思维导图 数据分析全知识 思维导图 Xmind思维导图 常用快捷键使用 本文参考 本文仅作学习分享 侵删 作者 赵
  • 非递归算法——快速排序、归并排序

    哈喽大家好 我是保护小周 本期为大家带来的是常见排序算法中的快速排序 归并排序 非递归算法 分享所有源代码 粘贴即可运行 保姆级讲述 包您一看就会 快来试试吧 目录 一 递归的缺陷 1 1 栈是什么 数据结构 栈 又是什么 他们之间有什么区
  • Python保存数据到已存在的excel文件中【openpyxl / pandas】复制表格中的所有sheet到另一个表格

    大家早上好 本人姓吴 如果觉得文章写得还行的话也可以叫我吴老师 欢迎大家跟我一起走进数据分析的世界 一起学习 感兴趣的朋友可以关注我的数据分析专栏 里面有许多优质的文章跟大家分享哦 前段时间在工作的时候遇到了一个问题 如何将数据保存到已存在
  • 资深架构师分享:10个 Javascript 小技巧帮你提升代码质量

    主要介绍以下几点 提炼函数 合并重复的条件片段 把条件分支语句提炼成函数 合理使用循环 提前让函数退出代替嵌套条件分支 传递对象参数代替过长的参数列表 少用三目运算符 合理使用链式调用 分解大型类 本文会不断更新 不足之处欢迎评论区补充 1
  • 如果我是java面试官,会对面试者提问哪些问题

    作为一名Java面试官 可能会问面试者有关Java的基础知识 比如Java的可扩展性 可重用性和安全性 以及Java的技术和工具 如Java虚拟机 Java类库和Java开发工具 此外 还可以就面试者的个人背景和Java经验提问 比如他们在
  • linux安装ffmpeg

    1 下载解压 wget http www ffmpeg org releases ffmpeg 3 1 tar gz tar zxvf ffmpeg 3 1 tar gz 2 进入解压后目录 输入如下命令 usr local ffmpeg为
  • 微软七届MVP桂素伟:移动互联网与职业规划

    原文地址 http student csdn net mcd topic 163587 955481 2014年10月19日在哈尔滨工业大学举办了CSDN高校俱乐部全国巡讲 此次邀请到了微软七届MVP和山西 Net俱乐部创始人桂素伟 他擅长
  • lua调用不同lua文件中的函数

    a lua和b lua在同一个目录下 a lua调用b lua中的test方法 注意b中test的写法 M 和 a中调用方法 b lua local M function M test ngx say hello test end retu

随机推荐

  • 要面试了,写写小程序练练手,顺便记录一下

    1 大数相乘 int i 0 j 0 tmp 0 define MAX A 12 define MAX B 10 void main int i 0 j 0 tmp 0 int a MAX A 1 2 3 4 5 6 7 8 9 1 2 3
  • 【DockerCE】使用Docker安装运行性能测试工具-RunnerGo

    一 安装环境 CentOS 7 9 Docker CE 23 0 1 Docker compose 2 17 2 二 资源配置 4核8G 官方建议8核16GB 三 安装运行 从Github下载安装所需的文件包 版本1 0 3 这里选择的是t
  • 《MySQL实战45讲》读后感 06

    收获到的知识点 MySQL里面的锁大致可以分成全局锁 表级锁和行锁三类 全局锁 加全局锁的方法一 flush tables with read lock FTWRL 当你需要整个库处于只读状态的时候 可以使用这个命令 之后其它的线程会被阻塞
  • 智能检测与控制

    智能检测与控制在智能工厂各层次中的应用 智能工厂各层次定义的功能以及各种系统 设备在不同层次上的分配如下 1 计划层 实现面向企业的经营管理 如接收订单 建立基本生产计划 如原料使用 交货 运输 确定库存等级 保证原料及时到达正确的生产地点
  • MATLAB金融工具箱(二)--执行常见的金融任务

    二 执行常见的金融任务 1 简介 金融工具箱包含了可以执行许多常见的金融任务的函数 包括 l 处理和转换日期 2 4页 日历功能可以将日期在不同格式之间进行转换 包括Excel格式 并决定未来和过去的日期 分辨假期和工作日 计算日期之间的时
  • 【Qt开发】编译时报"undefined reference to"问题的解决方案

    1 出现原因分析 Undefined reference to 错误 这类错误是在连接过程中出现的 可能有两种原因 1 是使用者自己定义的函数或者全局变量所在源代码文件 没有被编译 连接 2 干脆还没有定义 这需要使用者根据实际情况修改源程
  • 基于矩阵求解多元线性回归

    多元线性回归法也是深度学习的内容之一 用java实现一下多元线性回归 一元线性回归的公式为 y a x b 多元线性回归的公式与一元线性回归的公式类似 不过是矩阵的形式 可以表示为Y AX b 其中 Y是样本输出的合集 X是样本输入的合集
  • 协议转换网关 通用服务器,数据采集、协议转换网关

    产品名称 数据采集 协议转换网关 产品链接 http cn trustexporter com cp luomicekong o4256770 htm 手机版链接 https m trustexporter com cz4256770 ht
  • 【Linux】安装Ubuntu18.04时常见的一些问题

    1 vim sudo apt get install vim 出现 Command vim not found 解决办法 输入sudo apt install vim即可 sudo apt install vim 如果安装失败最后一行显示
  • TCP对方关闭对应的进程,调用Send将会产生Broken pipe信号默认会关闭进程

    解决 Linux下send函数 Broken pipe错误的解决方法 http www xootus net cache shtml 52 content 491 htm
  • 郝斌老师C语言零基础自学专讲180集完整版

    从C语言基础到后面的指针之类的都有 讲得还不错 下载地址 http pan baidu com share link shareid 43714 uk 1711320320
  • 编写一套工具库并上传NPM

    你的 工具箱 开箱即可用的 directive utils 说明 vue3 directive tools 是一个方便在 Vue 3 Ts 项目中快速使用的 directive tool 的 npm 插件 它允许您轻松地在项目中添加多种功能
  • 【网站】浏览器页面文本如何禁止和解除

    2023年 第37周 给自己一个目标 然后坚持总会有收货 不信你试试 有时候 看法的网站 网页文本内容希望不能被复制 那么就需要对浏览器网页进行一些限制 是一种网站开发中的保护措施 有时候 又希望能够复制网页的一些文本 发现被禁止 这就有了
  • 1015-O专题三

    1 题号 1015 O 2 题意 十进制转换二进制 十进制数在0 1000之间 3 解题思路 十进制数1000的二进制数为1111101000 共10位 所以定义数组内存11就可以 除2 取余数分别标记 输出时要将数组从后往前输出 4 感想
  • python对MP4文件的音轨读取和整合

    工作中 使用opencv对视频的人脸做处理 但是发现处理完成后得到的视频文件并没有声音 为此 作者采用以下办法解决 1 安装moviepy库 pip install moviepy 2 导入moviepy库 from moviepy edi
  • 1.3 安卓应用目录结构

    一 安卓应用视图 打开之前我们创建的安卓应用 HelloWorld 1 Project视图 安卓项目默认是Android视图 需要切换到Project视图 2 Package视图 切换到Package视图 3 Android视图 切换到An
  • 如何实现随机生成坐标点,并且使每个坐标点之间的距离大于某个距离?(用于散点图的绘制,进行数据的处理)

    背景 最近需要开发一个新需求 需要绘制一个随机生成数字的散点图 要求点与点的距离要大于某个特定值 解决思路 通过循环获取每个坐标点 每获取一个新的坐标点 都要与之前生成的坐标点进行对比 如果大于指定距离 则符合条件 退出循环 如果小于或等于
  • found input variables with inconsistene numbers of samples:[] 报错处理

    在用train text spilt进行机器学习的训练时候 出现了以下的报错 代码检查发现错误 train x train y test x test y train test split train x train y的行数不一致 应该改
  • 1分钟教你配置好你的python环境

    欢迎来到我们的系列博客 Python360全景 在这个系列中 我们将带领你从Python的基础知识开始 一步步深入到高级话题 帮助你掌握这门强大而灵活的编程语法 无论你是编程新手 还是有一定基础的开发者 这个系列都将提供你需要的知识和技能
  • 详解移植mjpg_streamer到arm板

    介绍 Mjpg streamer是一个开源软件 用于从webcam摄像头采集图像 把它们以流的形式通过基于ip的网络传输到浏览器如Firefox Cambozola VLC播放器 Windows的移动设备或者其他拥有浏览器的移动设备 mjp