【NI】在NI RtLinux 上部署 mjpg-streamer

一、运行环境

硬件平台:NI IC-3173 

软件平台:NI Real-time Linux

目标:在NI平台上安装USB监控摄像机,可以在远端通过网页web实时查看。

二、操作步骤

由于本人之前用过mjpg-streamer,个人感觉此工具用于开发监控摄像头再合适不过,进而想到可以再NI(本人用的是NI IC-3173)的硬件平台上使用mjpg-streamer。

1. 在NI平台上安装软件的方法

用过Linux的都知道,要在Linux上编译安装软件,需要gcc/g++的支持,同时,大部分软件都使用make来快速安装,因而首先需要安装gcc编译器make工具。在NI平台上,安装软件可以通过opkg来完成(opkg install ****)

1. 安装gcc编译器

通过尝试,本人使用 opkg install gcc 命令,发现并不能安装成功gcc编译器,在NI论坛上搜索后,一下帖子给了我启发 http://forums.ni.com/t5/NI-Linux-Real-Time-Documents/Installing-gFortran-Compile-Tools-on-NI-Linux-Real-Time/ta-p/3538813

简而言之,运行

rm /usr/bin/lastb

opkg update && opkg install packagegroup-core-buildessential git

如此这般之后,通过 gcc -v 可以查看gcc是否安装成功

2. 安装make工具

make工具的安装比较简单,直接使用

opkg install make

即可安装成功。

2. 安装mjpg-streamer

1. 在网上又查了一边安装mjpg-streamer的方法,一致做法是先安装libjpeg,再安装mjpg-streamer,因为后者需要前者支持。

2. 本人试了多种方法安装libjpeg,不外乎

    (1) 下载libjpeg源码包,configure 后 make,下载地址http://www.ijg.org/files/ ,安装方法可参考文末链接1、2

     (2) 通过opkg安装,opkg install libjpeg-dev(不知道对不对,欢迎指正)

3. 安装libjpeg-streamer

如果以上步骤顺利的话,这一步就水到渠成了,下载mjpg-streamer安装包,mjpeg-streamer主要有两个版本,r63略老一点,code 182 较新,此处我使用的是code 182版本的

     (1) r63 https://sourceforge.net/projects/mjpg-streamer/

     (2) code 182 https://sourceforge.net/p/mjpg-streamer/code/HEAD/tree/

另附网友github https://github.com/jacksonliam/mjpg-streamer

下载完成后,解压到/home/user目录下(个人喜好),解压

tar -xvzf mjpg-streamer*

cd mjpg-streamer-code-182/mjpg-streamer

make

需要设置参数的童鞋可以参考文末链接1、2

至此安装完成,运行一下试试吧

4. 运行 mjpg-streamer

在 /home/user/mjpg-streamer-code-182/mjpg-streamer下,有个默认启动脚本 start.sh

./start.sh

三、插曲

相信任何过程都不会是一番风顺的,这里记录了我都探索历程

1. 使用NI交叉编译工具编译mjpg-streamer,编译工具下载及使用参考文末链接3、4

结果是编译未通过,提示错误:

..\plugins\input_uvc\jpeg_utils.c:27:21: fatal error: jpeglib.h: No such file or directory

compilation terminated.

如果有哪位大侠解决了,还望不吝赐教

【NI】在NI RtLinux 上部署 mjpg-streamer_第1张图片

2. 出现上述提示我都第一反应就是libjpeg库没安装,那就也交叉编译一下呗,于是又用NI的交叉编译工具(Eclipse)编译上面下载的libjpeg库(我用的是v8版本的),开始出现第一个错误,提示无法找到 jconfig.h,后百般搜索,发现可以吧jconfig.txt改为jconfig.h即可,参加jconfig.txt的内容(参考 http://blog.csdn.net/u010640288/article/details/23221797)

然而改过之后也不是完全可以,仍然提示错误

x86_64-nilrt-linux-gcc -O0 -g3 -Wall -c -fmessage-length=0 -o jdpostct.o "..\\jdpostct.c"

x86_64-nilrt-linux-gcc -O0 -g3 -Wall -c -fmessage-length=0 -o jmemdos.o "..\\jmemdos.c"

..\jmemdos.c:81:3: error: unknown type name 'You'

..\jmemdos.c:81:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'to'

..\jmemdos.c:81:14: error: unknown type name 'to'

..\jmemdos.c:85:39: error: invalid suffix "K." on integer constant

..\jmemdos.c:100:11: error: expected ':', ',', ';', '}' or '__attribute__' before '*' token

..\jmemdos.c:104:11: error: expected ':', ',', ';', '}' or '__attribute__' before '*' token

..\jmemdos.c:107:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'jdos_open'

..\jmemdos.c:108:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'jdos_close'

..\jmemdos.c:109:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'jdos_seek'

..\jmemdos.c:110:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'jdos_read'

无解,欲哭无泪啊

3. 百般折腾后,终于使用开始所述方法安装成功,开开信心地运行 start.sh,在客户端输入 http://192.168.1.127:8080/?action=stream 时,却是黑乎乎地一片,这是什么鬼,开始认为是jpeg库的原因,可是安装jpeg库后,问题未解决,后来想到之前用mjpg-streamer的时候也出现过这种问题,有的相机可以用mjpg压缩,有的不行,必须用yuv未压缩的格式(当然占带宽),因而,我在 命令行参数中修改为

./mjpg_streamer -i "./input_uvc.so -y -f 10" -o "./output_http.so -w ./www"

其中 -f 是设置帧频,因为默认帧频是5,太低了。

至此,终于见到图像了,散花。



参考链接:

1 . mjgp-steame的移植

2. mini2440开发板移植mjpg-streamer

3. GNU C & C++ Compilers for x64 Linux (Windows host) 2014-2016

4. Eclipse入门 – 用于基于NI Linux Real-Time的NI CompactRIO设备

你可能感兴趣的:(【NI】在NI RtLinux 上部署 mjpg-streamer)