a安装mjpeg linux

2016-09-27 01:21:16 qf0129 阅读数 1936

安装mjpg-stream
安装依赖库:

sudo apt-get install subversion
sudo apt-get install libv4l-dev
sudo apt-get install libjpeg8-dev
sudo apt-get install cmake

下载项目包:

wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip

解压:

unzip master.zip

编译安装:

nano mjpg-streamer-experimental/plugins/input_uvc/input_uvc.c

修改为: int width = 640, height = 480, fps = 30, format = V4L2_PIX_FMT_YUYV

然后:

cd mjpg-streamer/mjpg-streamer-experimental
make USE_LIBV4L2=true clean all
cp *.so /usr/lib/

进入mjpg-streamer/mjpg-streamer-experimental目录
执行以下命令启动:

./mjpg_streamer -i “/usr/lib/input_uvc.so -n -d /dev/video0 -r 640x480 -f 30 -y YUYV” -o “/usr/lib/output_http.so -n -p 8080 -w ./www”

此时,局域网内电脑可用浏览器打开这个链接查看

http://局域网ip:8080


如果需要外网访问,继续往下:

配置端口映射
浏览器打开自己家的电信猫或路由器管理网站:
我家的是电信光猫,进入http://192.168.1.1
输入账号密码后,配置nat虚拟服务器
添加一项,输入一个名称,ip填写对应内网ip,初始端口和终止端口都填8080,保存

关闭防火墙

apt-get install ufw
ufw disable

此时,手机关闭wifi,使用流量打开以下网址查看

http://外网ip:8080

开发网站可以嵌入这个链接http://外网ip:8080/?action=stream

参考:http://blog.csdn.net/dearwind153/article/details/52563141

2017-11-22 15:24:46 qq_38880380 阅读数 2996

转眼间,V4L2已经搞了很长时间,从最开始的一窍不通,到后来的渐渐熟悉,从最开始照猫画虎的使用YUYV格式之间转换,到后来使用MJPEG格式读取,中间颇有周折。趁任务完成间隙,来简单总结下V4L2的使用。(文章只主要写了过程,完整程序已经附在最后)

有读者要问,opencv已经有相关的读取摄像头的函数,为什么要使用V4L2这么麻烦呢。其实主要是因为后面要将程序移植到板子上,而在板子上不能直接使用opencv中读取摄像头的函数的,所以需要借助V4L2来实现读取视频的功能。还有,既然YUYV格式这么简单(见文章末尾附的大神的博客),为什么要用MJPEG格式呢?这一点主要是考虑到YUYV数据量较大,影响摄像头读取速度,也会影响到后面都视频数据传输的扩展。

V4L2主要应用于linux读取USB摄像头,有关它的介绍网上有很多资料,这里不再赘述。结合主题,本文主要讲述如何使用MJPEG格式读取并将其转换为OpenCV中的IplImage格式,以方便进行图像处理,最后以视频的形式进行实时显示。截至到今天晚上,已经使得程序能够实时以MJPEG格式读取并显示,图像分辨率为1920*1080,速度100ms每帧。由于项目需要,所以尽可能使用较大分辨率,导致速度有点慢,如果使用普通的640*480,速度比较会比较快。

有点啰嗦,下面进入主题:使用MJPEG格式读取视频,并实时显示。整个过程主要分为以下几个步骤:

1.      打开视频设备文件,并进行参数初始化,设置采集分辨率、格式等;

该步骤中主要使用函数:

Open(“/dev/video0”,O_RDWR);//打开USB摄像头

ioctl(fd,VIDIOC_QUERYCAP,&cap);//查询设备的信息

ioctl(fd,VIDIOC_S_STD,&fmt);//设置视频的格式

2.      申请帧缓冲区,并将其映射到用户空间;

ioctl(fd,VIDIOC_REQBUFS,&req);//申请缓冲帧

malloc(req.count*sizeof(*buffer));

ioctl(fd,VIDIOC_QUERYBUF,&buf);//将申请到的帧缓冲映射到用户空间

3.      将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;

ioctl(fd,VIDIOC_QBUF,&buf);//将申请到的帧缓冲全部加入队列

ioctl(fd,VIDIOC_STREAMON,&byte);//开始采集

4.      应用程序从视频采集输入队列取出帧缓冲区,将其转换为OpenCV中的通用数据格式,然后显示,之后重新放入视频采集队列,循环该过程;

ioctl(fd,VIDIOC_DQBUF,&buf);//取缓冲帧

CvMatcvmat=cvMat(IMAGEHEIGHT,IMAGEWIDTH,CV_8UC3,(void*)buffer);//将帧内容赋值给CvMat格式的数据

IplImage img =cvDecodeImage(&cvmat,1);//解码,这一步将数据转换为IplImage格式

cvShowImage(“one”,img);//显示图像

cvReleaseImage(&img);//释放图像空间

ioctl(fd,VIDIOC_QBUF,&buf);//将缓冲重新加入队尾

循环上面的步骤,就可以形成视频啦

5.      停止视频采集,关闭设备文件。

ioctl(fd,VIDIOC_STREAMOFF,&byte);

close(fd);

 

由于时间关系,上面只是简单介绍了一下整个过程,相关函数的使用和函数中的结构体参数网上都有很多资料可供参考,当然也可以看下官方给的API手册,讲的很详细,但是有点长,且是英文的。下面列出我学习时找到的一些资料,

最后附上我自己的程序,目前程序能够实现基本的功能,但是本人还想进一步优化以提高效率,有其他好的想法的朋友可以与我联系。Mail:tsuibeyond@foxmail.com

一个大神的博客,最开始我就是按照这个学习的

网址:<http://www.cnblogs.com/surpassal/archive/2012/12/19/zed_webcam_lab1.html>

V4L2的官方手册:

网址:<http://v4l.videotechnology.com/dwg/v4l2.pdf>

我自己的程序:

 百度网盘的链接:<链接:http://pan.baidu.com/s/1dDfMPqD 密码:5ahu>

程序是在linux环境下使用QT编译的,需要自己安装OPENCV,并在.pro文件中配置,我的.pro文件中已经将相关路径写入,读者使用时可以按照自己安装OPENCV的路径修改。

最后,加上效果图展示,由于分辨率较大,屏幕不能显示完整窗口:


传送门:Linux环境下使用V4L2+opencv以MJPEG格式读取USB摄像头并实时显示


2011-11-30 10:44:18 zhaole20094463 阅读数 24214
 

Mjpeg‐stream 是一个开源软件,用于把mjpeg格式的文件变成流媒体输出。

1.  环境平台 

目标板:mini2440

开发板上运行的系统: 内核 Linux‐2.6.32.2, 默认文件系统 root_qtopia

2  在 mini2440 上安装 mjpeg‐stream 

Step1:  获取要安装的文件 mjpeg‐stream 

文件名:mjpg‐streamer‐mini2440‐bin‐r6.tar.gz 

获取途径:自行下载 

下载地址: 

http://mjpg‐streamer‐mini2440.googlecode.com/files/mjpg‐streamer‐mini2440‐bin‐r6.tar.gz  

Step2:在 mini2440 上安装 mjpeg‐stream 

使用优盘或者ftp 等工具把 mjpeg‐stream 复制到开发板,在此假定复制到了/home/plg 目录

进入/home/plg目录

在控制台终端执行如下命令: 

#mkdir  mjpg‐streamer ;创建一个独立目录用于测试 

并拷贝mjpeg-stream到前面创建的目录

#cd  mjpg‐streamer ;进入该测试目录 

#tar xvzf mjpg‐streamer‐mini2440‐bin‐r6.tar.gz ;解压安装 

3  通过网页浏览USB摄像头 

Step1:  连接好硬件 

把摄像头插装到开发板上,可以先使用开发板自带的“usb摄像头”程序测试该摄像头可用,然后重启开发板。 

Step2:  启动 mjpeg‐stream 

在命令行终端执行以下命令: 

#cd /mjpg‐streamer ;进入测试目录  

进入存放开发板中存放mjpg-streamer的文件中:如下:

 [root@FriendlyARM /]# cd home/plg/mjpg-streamer/

[root@FriendlyARM mjpg-streamer]#

[root@FriendlyARM mjpg-streamer]# ./mjpg_streamer

MJPG Streamer Version.: 2.0

ERROR: could not find input plugin

       Perhaps you want to adjust the search path with:

       # export LD_LIBRARY_PATH=/path/to/plugin/folder

       dlopen: input_uvc.so: cannot open shared object file: No such file or dir

ectory

[root@FriendlyARM mjpg-streamer]#

如出现上述错误:这是找不到共享造成的。Linux和windows不一样,不会在可执行文件所在的目录搜索共享库文件。解决办法:敲入如下命令:export LD_LIBRARY_PATH=/home/plg/mjpg-streamer:$ LD_LIBRARY_PATH(我的共享库文件时放在/mjpg-streamer目录里的),设定共享库的搜索路径就可以了!

[root@FriendlyARMmjpg-streamer]#exportLD_LIBRARY_PATH=/mjpg-streamer:$LD_LIBRARY_PATH

[root@FriendlyARM mjpg-streamer]#

然后再执行./mjpg_streamer

会出现如下信息

[root@FriendlyARM mjpg-streamer]# ./mjpg_streamer

MJPG Streamer Version.: 2.0

 i: Using V4L2 device.: /dev/video0

 i: Desired Resolution: 640 x 480

 i: Frames Per Second.: 5

 i: Format............: MJPEG

 o: www-folder-path...: disabled

 o: HTTP TCP port.....: 8080

 o: username:password.: disabled

 o: commands..........: enabled

此时可以在终端看到如图输出信息,这说明已经成功启动 mjpeg‐stream 程序,这样就可以通过网页浏览视频了。

我的arm板的IP是192.168.1.230(根据自己的板子的情况而定)

在浏览器上输入:http://192.168.1.230:8080/?action=stream(我的浏览器是火狐的)

就可以看见

 

结束!

注意:在这里用到的浏览器最好不要使用IE和360或者其他以IE为内核的,因为我在IE和360上做测试,只能显示你下载东西,并不能显示。

火狐或者是google都是可以看到完整视频的浏览器

2016-07-09 12:20:00 weixin_34019144 阅读数 80

首先要安装各种解码器 

1、lame 
lame-3.99.5.tar.gz 
Url:http://sourceforge.net/project/showfiles.php?group_id=290&package_id=309 
安装方法如下:

1     tar -zxvf lame-3.99.5.tar.gz   2     cd lame-3.99.5   3     ./configure --enable-shared 4     make   5     make install  

2、libogg 
libogg-1.3.1.tar.gz 
Url:http://www.xiph.org/downloads/ 
安装方法如下:

3、libvorbis 
libvorbis-1.3.3.tar.gz 
Url:http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz

(libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装)
安装方法如下:

1     ./configure 2     make   3     make install  

4、xvid 
xvidcore-1.3.2.tar.gz 
Url:http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz 
安装方法如下:

5、x264 
latest_x264.tar.bz2 (其中包含的目录是 x264-snapshot-20131023-2245) 
Url:http://www.videolan.org/developers/x264.html 
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ 
安装方法如下:

1
2
3
4
1    tar -jxvf latest_x264.tar.bz2
2     ./configure 
3     make 
4     make install 

 

6、libdts 
libdca-0.0.5.tar.bz2
Url: http://www.videolan.org/developers/libdca.html
安装方法:

7、a52 
a52dec-0.7.4.tar.gz           (这个库从2002年就没有更新过了)
http://liba52.sourceforge.net/downloads.html       
安装方法:

8、faad2 
faad2-2.7.tar.gz 
http://www.audiocoding.com/downloads.html 
安装方法

9、faac 
faac-1.28.tar.gz 
http://www.audiocoding.com/downloads.html
安装方法:

10、amr-nb 
amrnb-10.0.0.0.tar.bz2 
http://ftp.penguin.cz/pub/users/utx/amr/ ( 从此处下载最新版本 )
安装方法:

11、amr-wb 
amrwb-7.0.0.1.tar.bz2 
http://ftp.penguin.cz/pub/users/utx/amr/ ( 从此处下载最新版本 )
安装方法:

1     ./configure 2     make   3     make install  


12、最关键的一步, 安装ffmpeg

1
2
3
1   ./configure --prefix=/usr/local/ffmpeg2 --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libxvid --enable-postproc --enable-ffserver --enable-ffplay
2   make 
3   make install 

 在./configure的时候会报错, 提示说没有libopencore-amrnb和libopencore-amrwb两个库. 我参考了 [2], 使用如下命令安装它们:

1
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev

 如果./configure的时候加入 --enable-shared, 编译安装没有问题. 但是运行ffmpeg命令就会出错:

1
relocation error: /usr/local/lib/libavfilter.so.3: symbol sws_get_class, version LIBSWSCALE_2 not defined in file libswscale.so.2 with link time reference;

 这时可以参考 [3], 大意是说跟gstreamer的动态库冲突了, 要卸载gstreamer. 但是如果卸载了gstreamer我的多媒体软件多不能用了. 所以我卸载了ffmpeg并重新编译成静态库. 安装完之后, 运行ffmpeg成功, 输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
ffmpeg version 2.0.1 Copyright (c) 2000-2013 the FFmpeg developers                                                     
  built on Oct 25 2013 17:40:51 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)                                             
  configuration: --prefix=/usr/local/ffmpeg2 --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libxvid --enable-postproc --enable-ffserver --enable-ffplay
  libavutil      52. 38.100 / 52. 38.100
  libavcodec     55. 18.102 / 55. 18.102
  libavformat    55. 12.100 / 55. 12.100
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 79.101 /  3. 79.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

 

 

[1] http://yezi.iteye.com/blog/139399

[2] http://www.learndiary.com/2011/04/ubuntu-linux-%E4%B8%8B-ffmpeg-%E5%8F%8A-mencoder-%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8%E5%B0%8F%E7%BB%93/

[3] http://blog.csdn.net/nil_foc/article/details/6547047

2012-04-12 21:53:46 whb_mcu 阅读数 563

本文来自:
http://blog.chinaunix.net/uid-23093301-id-86394.html

本课题嵌入式端通过USB摄像头采集视频。基于嵌入式LinuxV4L音视频编程接口,获得MJPEG格式的视频流。

嵌入式端视频采集流程图如图:

从YUYV转换成MJPEG

阅读数 2053

Mjpeg‐stream移植

阅读数 1555