EDA365电子论坛网

标题: 全志A40i远程视频监控试用体验 [打印本页]

作者: 罗罗诺亚    时间: 2023-2-15 14:45
标题: 全志A40i远程视频监控试用体验
本帖最后由 Heaven_1 于 2023-2-15 17:07 编辑 7 h8 Y* y$ Z0 \7 A& x

8 O8 B2 a/ i4 a, L" q/ J8 v5 b

今天来介绍一个解决方案MJPG-Streamer。MJPG-Streamer的原理是将USB摄像头采集的图像以JPEG格式发送出去,然后持续更新图片形成一个视频流。

4 c% |% E1 ?  U

它的优势有两个:

一个是和浏览器的兼容性最好,可以轻松地在浏览器中显示,而无需担心浏览器是否支持Flash或流媒体协议;二是采用JPEG没有前后帧的关联,所以如果出现丢包只影响当前画面,而不会像H.264那样可能连续一段时间的马赛克图像。


# A$ Y- f! ?4 i: D$ w/ z* E

当然也有缺点:

它的缺点是JPEG流的压缩效率比较低,比H.264浪费带宽。

3 `7 o" _5 S6 n, x# r4 N( C+ ^0 Q

二. Libjpeg库的编译

MJPG-Streamer要用到libjpeg,所以首先需要编译libjpeg。,我使用的是最新的9e版本。将源代码解压到jpeg-9e目录后,在该命令下执行configure命令进行配置:

1

./configure --host=ARM-linux-gnueabihf --prefix=/mnt/boaled/jpeg-9e/_install/

; W" s2 N1 K4 Z$ B$ v

其中的host是指明所使用的编译器,prefix是指定编译后文件安装的目录。

然后执行下面的命令:

1

make

2

make install

: k8 h6 ~8 Z- L

0 j7 e( d/ A. V* a; n: c5 L
9 I- j& k5 x5 V
+ E5 A) I$ X1 ^

命令执行完毕,就会在prefix所指定的目录下生成4个目录,其中include目录包括所需要的头文件,而lib目录下包括库文件。这些在后面会用到。

* T1 ]. y8 h7 q# k4 f

编译后需要把libjpeg.so.9.5.0拷贝到开发板的 /usr/lib 目录下,并建立一个指向该文件的软连接libjpeg.so.9。

- m! o: b  q. ^3 A; I% ?

另外,开发板原来带有libjpeg.so.8.0.2这个版本。如果不希望安装更新版本,


9 h0 I4 u. M1 l5 w

三. MJPG-Streamer的编译

MJPG-Streamer有两个主要版本(建议在PC打开链接):

1.http://sourceforge.net/projects/mjpg-streamer/这个是原始版本,不过原作者已经放弃更新了。

2.https://github.com/jacksonliam/mjpg-streamer/

这个是后续更新的版本。


) x: b0 n) n" M1 Y

要在飞凌嵌入式OKA40i-C开发板上使用,只能使用sourceforge那个版本。因为github的版本虽然更新,但是它对内核的版本有要求,至少3.18以上。

- u/ ]* R8 m1 ^" ?, \" C

OKA40i-C开发板提供的内核版本是3.10,无法正确处理新版本的某些V4L2消息。另外,github版本采用CMake进行编译,后面所介绍的编译方法也不适用。

) O( D: {0 F% I0 n2 H

进入下方地址:

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

点右上的“Download Snapshot”下载最新版的mjpg-streamer-code-182。这里可以看到两个mjpg-streamer目录。一般使用mjpg-streamer-experimental这个版本,它支持的功能更多一些。

6 S5 m- _6 d1 J0 Z( n* m6 R

$ R' [$ d. R  u+ X4 M  o
! l# ?; Q: x- f. C: J1 x
# R$ c0 f& m( A6 [. g

在编译之前,需要先修改plugins/input_uvc目录下的makefile文件,在其中加入如下两行:


9 \. {& W1 A* a! ?& p
! h( o6 a2 W/ e9 l6 G: O1 r. Y7 P) e" U+ P# F

2 R, r% X0 M' |
% V; G6 r- {. m- e: Y! @

这两行的作用就是编译时能够找到我们前面生成的libjpeg库。如果想修改MJPG-Streamer的插件设置,也可以修改mjpg-streamer-experimental目录下的makefile:


) ~0 P8 m' L+ ]* r  A 1 h  y$ q. A9 E

. k3 R5 w3 k% e  Y' ~: x# Z) s8 n1 i8 [4 o" p

! E( a- b7 G. c- h' F

在本次测试中用不到其他插件,所以就采用默认配置。

然后在命令行执行下面的命令就可以编译了。

1

make CC=arm-linux-gnueabihf-gcc


! F3 U6 V3 Z' e3 n
; h: ^; D8 ^# h3 z6 u
0 ~, B+ \0 E4 n0 ]" G/ W! |" C) o! q+ Q. K  s

编译成功后把mjpg_streamer和几个so文件都拷贝到开发板上并正确设置好权限就可以运行了。


9 y* c4 e8 N/ B! }& W" h

四. 测试结果

在input_testpicture插件中带有一幅默认图片,即使你手上没有摄像头,也可以使用该插件测试MJPG-Streamer的功能。

在开发板的终端输入如下命令:

1

./mjpg_streamer -i "input_testpicture.so"

4 \% P2 J5 [6 G( o  g* i
1 z& {: o$ t2 V6 T3 ~7 p% K! `0 j- ^

6 M2 V0 X, V1 `5 T* {8 v6 h) l5 v" t2 Q

如果使用USB摄像头,需要使用input_uvc.so插件,在开发板的终端输入命令,结果如下图所示:

1

./mjpg_streamer -i "input_uvc.so -r 800x600" -o "output_http.so"

5 W. O% o  K# s, y1 ]/ A% [- @
7 D. G7 J; s. T  T
4 k2 Q' R! Y% {7 j, l

' k2 o4 {; S' y" c- e$ y
1 S1 T$ E5 d) k; Z! V2 |! @# L
作者: Mcu_001    时间: 2023-2-15 17:07
这个板子功能很强大,一个板子多钱




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2