2706|3

1249

帖子

69

TA的资源

纯净的硅(中级)

楼主
 

【米尔MYD-YA15XC-T评测】+使用mjpg-streamer搭建网络摄像头 [复制链接]

 
本帖最后由 dql2016 于 2021-11-20 16:03 编辑

0、mjpg-streamer介绍

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

    (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优点是对RAM和CPU的消耗比较少,可以快速的传输jpeg流。

 

一、米尔SDK安装

在终端执行命令:

  • . /opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

将设置好交叉编译工具链,常用的环境变量如CC。

 

二、libjpeg交叉编译

有些UVC摄像头只支持输出YUV原始图像,此时mjpg-streamer会将其转码为mjpeg,然后进行传输,此时会对CPU的消耗以及实时流的流畅度有影响,特别是分辨率比较大的时候。

因此mjpg-streamer 依赖 libjpeg, libjpeg下载地址:
http://www.ijg.org/

目前最新版本是v9d。libjpeg交叉编译命令:

  • make clean
  • . /opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
  • ./configure --host=arm-ostl-linux-musl --prefix=$HOME/stm32mp1/build_jpegsrc.v9d
  • make -j6
  • make install

写成编译脚本:

编译成功后得到动态库:

 

米尔MYD-YA15XC-T内核已经配置好了UVC和USB 驱动,因此无需重新配置编译内核。

 

三、mjpg-streamer交叉编译

mjpeg-streamer下载

https://sourceforge.net/p/mjpg-streamer/code/HEAD/tree/

目前最新版本为r182,本次测试使用版本r63。

在ubuntu可通过2种命令下载代码:

  • svn checkout svn://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer-code

或者

  • svn checkout https://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer-code

在编译前需要对源码的Makefile做以下修改:
将源码的所有Makefile(包含其子目录)中的编译工具链修改为米尔开发板的编译工具链,由于在终端执行命令. /opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi会设置好交叉编译相关的环境变量,因此去掉Makefile文件中的CC 即可。

本次测试只需要 input_uvc.so 和 output_http.so,在主目录中的Makefile里面只选择这两个,其它的去掉。

插件input_uvc依赖jpeg,因此修改plugins/input_uvc/Makefile文件,指定jpeg库头文件路径:

  • CFLAGS += -I$HOME/stm32mp1/build_jpegsrc.v9d/include

指定链接jpeg动态库路径:

  • -ljpeg -L$HOME/stm32mp1/build_jpegsrc.v9d/lib

编译成功之后,在lib目录会生成如下输入、输出动态库文件:

在mjpg-streamer-r63目录生成mjpg-streamer可执行文件:

查看一下mjpg-streamer文件信息,ARM 32位可执行程序:

将上面生成的动态库文件都复制到lib目录:

然后将lib目录里面的文件和mjpg-streamer可执行文件一起打包为app_and_lib.tar.xz,使用SCP命令将它复制到开发板home目录:

解压:

得到如下文件,使用chmod +x mjpg-streamer命令为mjpg-streamer添加可执行权限:

四、测试

插入USB UVC摄像头,正确识别到了视频设备:

手动指定一下库路径:

  • export LD_LIBRARY_PATH=./

执行下列命令启动mjpg-streamer:

  • ./mjpg_streamer -i "input_uvc.so -r 1920x1080" -o "output_http.so -w ./www"


如果是输出YUV格式的UVC摄像头,则执行命令:

  • ./mjpg_streamer -i "input_uvc.so -y -r 1920x1080" -o "output_http.so -w ./www

查看图片,在浏览器输入:
http://192.168.1.136:8080/?action=snapshot
查看视频,在浏览器输入:
http://192.168.1.136:8080/?action=stream
其中192.168.1.136为开发板IP地址。

视频和抓拍效果如下:

 


 

附录:

MJPG简介:MJPEG全名为 "Motion Joint Photographic Experts Group",是一种视频编码格式,Motion JPEG技术常用与闭合电路的电视摄像机的模拟视频信号“翻译”成视频流,并存储在硬盘上。典型的应用如数字视频记录器等。MJPEG不像MPEG,不使用帧间编码,因此用一个非线性编辑器就很容易编辑。MJPEG的压缩算法与MPEG一脉相承,功能很强大,能发送高质图片,生成完全动画视频等;从另一个角度说,在某些条件下,MJPEG也许是效率最低的编码/解码器之一。MJPEG与MJPG的区别:mjpeg是视频,就是由系列jpg图片组成的视频。

 

还有一款MJPG视频流服务开源软件uStreamer:

µStreamer is a lightweight and very quick server to stream MJPG video from any V4L2 device to the net.

https://github.com/pikvm/ustreamer

 

查看本帖全部内容,请登录或者注册

最新回复

谢谢分享,收藏了!   详情 回复 发表于 2021-11-25 23:40
点赞 关注
 
 

回复
举报

7007

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

看来这个输出插件的网站服务器插件很重要

其实,mjpg-streamer 是用插件的形势来完成相关的功能,主程序为 mjpg-streamer, 插件分输入和输出,输入就是取视频的方式,输出就是将内容转出的方式

 
 
 

回复

1249

帖子

69

TA的资源

纯净的硅(中级)

板凳
 
Jacktang 发表于 2021-11-22 07:34 看来这个输出插件的网站服务器插件很重要 其实,mjpg-streamer 是用插件的形势来完成相关的功能,主程序 ...

 
 
 

回复

7763

帖子

2

TA的资源

五彩晶圆(高级)

4
 

谢谢分享,收藏了!

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 6

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表