开源视频服务器软件MJPG-streamer的研究和应用

合集下载

基于MJPG-Streamer的移动视频监控系统的设计与研究的开题报告

基于MJPG-Streamer的移动视频监控系统的设计与研究的开题报告

基于MJPG-Streamer的移动视频监控系统的设计与研究的开题报告文献综述近年来,随着摄像头技术的逐渐成熟,视频监控系统在安防领域的应用越来越广泛。

现有的视频监控系统多依赖于专门的硬件设备,成本较高,而且移动性较差。

为了提高系统的灵活性和便携性,一些基于单片机或嵌入式系统的移动视频监控系统被提出。

基于单片机的设计成本低,但是功能相对有限;而基于嵌入式系统的设计功能更加灵活,具有较高的扩展性。

在移动视频监控系统的设计过程中,视频编码和传输是一个需要考虑的重要问题。

为了更好地实现视频的压缩和传输,一些开源的视频编码和传输软件被广泛应用。

MJPG-Streamer是一个常用的视频编码和传输软件,它可以将电脑或嵌入式硬件设备的摄像头实时采集的视频流进行MJPG格式的压缩,并通过LAN或WLAN网络传输视频流。

它具有配置简单、性能稳定、可扩展性强等优点,因此被广泛应用于移动视频监控系统的设计。

本项目将基于MJPG-Streamer进行移动视频监控系统的设计与研究。

本系统的设计目标是实现一个简单、灵活、具有扩展性的移动视频监控系统。

主要包括嵌入式硬件系统的设计与搭建、摄像头的选型与接入、MJPG-Streamer的配置与使用、移动端APP的设计与实现等。

研究内容与思路1. 嵌入式硬件系统的设计与搭建本项目将使用树莓派嵌入式计算机作为移动视频监控系统的硬件平台。

树莓派具有价格低廉、配置灵活、支持大量的GPIO扩展等优点,非常适合作为本项目的硬件平台。

在设计过程中需要考虑采用的树莓派型号、外部供电、扩展硬件模块等。

2. 摄像头的选型与接入本项目的摄像头选型需要考虑到图像分辨率、画面质量、价格等因素。

在选型之后,需要采用合适的接口进行摄像头的接入,如CSI接口、USB接口、AV接口等。

3. MJPG-Streamer的配置与使用MJPG-Streamer是一个开源的视频编码和传输软件,本项目将采用其对视频流进行实时压缩和传输。

mjpg_streamer使用说明

mjpg_streamer使用说明

网络视频服务器移植一、环境主机环境:ubuntu 10.10目标机:FS2410(S3C2410)主机工具链:gcc-4.4.5交叉工具链:arm-none-linux-gnueabi-gcc-4.3.2摄像头:ZC301二、移植过程1、配置内核是内核支持芯片为ZC301的摄像头Make menuconfigDevice Drivers ---><*> Multimedia support ---><*> Video For Linux[*] Enable Video For Linux API 1 (DEPRECATED) (NEW)[*] Video capture adapters (NEW) --->[*] V4L USB devices (NEW) ---><*> USB Video Class (UVC)[*] UVC input events device support (NEW)<*> USB ZC0301[P] webcam support (DEPRECATED)2、重新编译内核make zImage通过上面两个步骤就可以驱动我们的摄像头了。

但是这个驱动是基于V4l2的。

以前基于V4L 的一些上层应用就不能用了,或需要做大量的修改!这里我们要实现网络视频的功能,以前都是用servfox这个网络视频服务器,但是这个服务器就是基于V4L的,我们如果想用的话就得对servfox的源码进行修改。

这里我们选用另外一种方案mjpg-stream。

3、mjpg-stream的移植关于mjpg-stream的资料大家可以在下面这个网址查看:/apps/mediawiki/mjpg-streamer/index.php?title=Main_Pagemjpg-stream的移植需要jpeg的库,所以我们先移植jpeg的库(1)jpeg库的移植1)jpeg源码包通过下面这个网址下载/files/jpegsrc.v8b.tar.gz2)解压源码包tar xvf jpegsrc.v8b.tar.gz3)配置源码cd jpeg-8b./configure --prefix=/home/linux/s3c2410-2.6.35/video/jpeg--host=arm-none-linux-gnueabi4)编译make5)安装make install6)拷贝库到文件系统中cp //home/linux/s3c2410-2.6.35/video/jpeg /lib/libjpeg.so.8 /source/rootfs/lib (2)mjpg-stream的移植1)mjpg-stream源码包通过下面这个网址下载/projects/mjpg-streamer/2)解压源码tar xvf mjpg-streamer-r63.tar.gz3)修改源码cd mjpg-streamer-r63修改顶层makefile及plugins目录中的各级makefile将所有CC=gcc修改为CC=arm-none-linux-gnueabi-gcc修改plugins/input_uvc/Makfile修改CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC 为CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC-I/home/linux/s3c2410-2.6.35/video/jpeg/include修改$(CC) $(CFLAGS) -ljpeg -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo 为$(CC) $(CFLAGS) -ljpeg -L/home/linux/s3c2410-2.6.35/video/jpeg/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lojpeg_utils.c:27: fatal error: jpeglib.h: No such file or directory4)编译make5)测试mkdir /source/rootfs/mjpgcp *.so /source/rootfs/mjpgcp mjpg-stream /source/rootfs/bin打开开开发板运行mjpg_streamer -i "/mjpg/input_uvc.so" -o "/mjpg/output_http.so -w /www"在源码目录下有start.sh,这个脚本里有一些mjpg-stream的使用方法及说明打开一个网页输入下面地址就能够看到一个视频(开发板的IP为192.168.1.202):http://192.168.1.202:8080/?action=stream打开一个网页输入下面地址就能够看到一个静态图片:http://192.168.1.202:8080/?action=snapshot6)在mjpg源码下有一个www的目录,这个一个网络使用mjpg的实例,结合web 服务器(boa)可以实现一些其他相关功能。

开源视频服务器软件MJPG-streamer的研究和应用

开源视频服务器软件MJPG-streamer的研究和应用
C HE h — i N S u y ,HUANG Yo gh i n —u
(aut o t ai , un dn nvr t o Tc nl y G a@hu5 0 0 , h a F cl y fAu m t n G ag ogU i syf eho g , un o 10 6 C i ) o o e i o n
Ab t a t o e r s u c i to l me i a a p o e s g i mb d e e i e n o e o r e v d o s r e o t r s r c :F rt e o r e l fmut da d t r c s i n e e d d d v c ,a p n s u c i e e v rs f h mi i n wae
令 行 应 用 程序 。
该 软 件 可 应 用 在 基 于 I 议 的 网 络 中 ,从 网络 摄 像 机 P协 中 获 取 并 传 输 JE 格 式 的 图像 到 浏 览 器 。例 如 Frf 、 PG io ex
t ee e d d s s msatrco s o i , oi l me t ie u v i a c y tm a e nAr o t mb d e y t f r s - mpl t h e e c e mp e n vd o s r e l a l es s n e b s d o m9,w ih as a o t l h c lo C c n r n o a f n -n q i me t T e e p r n a s l s o a i meh d c n e h n et ef n t n o i e a ap o e sn ,a d o t de up n. r e h x ei me t r u t h ws h t h s t o a n a c ci fvd o d t rc si g n l e t t h u o t ev d o c nb l y df e t l n r w e . h ie a ep a e u n l i c i t o s r l yn e b

mini2440开发板移植mjpg-streamer

mini2440开发板移植mjpg-streamer

Mjpg‐streamer是一个开源软件,用于从webcam摄像头采集图像,把它们以流的形式通过基于ip的网络传输到浏览器如Firefox,Cambozola,VLC播放器,Windows的移动设备或者其他拥有浏览器的移动设备;关于它的介绍网上有一大堆,读者可自行了解;网上关于它的移植也很多,下面给出移植的过程与在编译过程中出现的一些问题与解决方法。

在移植Mjpg-streamer之前必须移植好libjpeg;因为在mjpg-streamer源码包下的README 文件中有下面一句话:* the input plugin "input_uvc.so" depends on libjpeg, make sure it is installed.下面开始移植的旅途一、环境主机环境:fedora 15目标机:友善之臂公司的mini2440开发板主机工具链:gcc-4.6.3交叉工具链:arm-none-linux-gnueabi-gcc-4.5.2(由于名字太长书写费时间,用一个软连接“arm-linux-gcc”指向它)二、移植过程第一步jpeg库的移植1、从/files/下载jpeg源码包;2、解压,进入其目录,cd /home/wu/jpeg-6b3、配置源码,(具体配置项可以运行命令./configure --help看看是什么意思,根据实际情况修改)./configure CC=arm-linux-gcc --host=arm-unknown-linux --prefix=/home/wu/jpeg-6b/jpeg --enable-shared --enable-static其中/home/wu/jpeg-6b/jpeg是编译后安装的目录,根据实际情况修改4、编译:make5、安装:make install6、拷贝库文件到开发板文件系统将/home/wu/jpeg-6b/jpeg/lib/目录下全部文件拷贝到开发板文件系统/nfs/rootfs/usr/local/mjpg-streamer下(此目录为mjpg-streamer在开发板的安装目录,当然你也可以把它放在开发板的/lib/目录下)第二步、移植mjpg-streamer1、下载源码,在https:///projects/mjpg-streamer/下载的源码(mjpg-streamer-r63)有点老了,最新的版本使用以下命令下载,svn cohttps:///svnroot/mjpg-streamermjpg-streamer2、进入其目录cd /home/wu/mjpg-streamer/mjpg-streamer/3、修改源码修改plugins/input_uvc/Makfile,修改CFLAGS = -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC为CFLAGS = -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I/home/wu/jpeg-6b/jpeg/include修改$(CC) $(CFLAGS) -ljpeg -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo为$(CC) $(CFLAGS) -ljpeg -L/home/wu/jpeg-6b/jpeg/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo注:/home/wu/jpeg-6b/jpeg就是上面移植jpeg库后安装的目录4、编译:make CC=arm-linux-gcc5、在开发板建立mjpg-streamer安装目录mkdir /nfs/rootfs/usr/local/mjpg-streamercp *.so /nfs/rootfs/usr/local/mjpg-streamercp mjpg-stream /nfs/rootfs/usr/local/mjpg-streamer将源码目录中的start.sh和目录www拷贝到/nfs/rootfs/mjpg-streamer目录下,然后就可以测试啦6、测试:修改start.sh文件,然后运行start.sh;在PC机打开一个网页,输入http://192.168.1.1:8080/?action=stream就可以看到图像。

物联网视频流服务器

物联网视频流服务器

初始化videoIn结构体: init_videoIn(videoIn, dev, width, height, fps, format, 1); ======》init_videoIn() 对vdIn结构体进行初始化 if (init_v4l2 (vd) < 0) ======》init_v4l2() if (dynctrls) initDynCtrls(videoIn->fd); /*对摄像头的调整*/ 最后执行input_cmd函数: input_cmd(led, 0);
Input_init()函数分析: ====================================================== ======》input_init()<plugins/input_uvc.c> 调用字符串处理函数将param->parameter_string字符串形式的命 令转换 为一个argv[MAX_ARGUMENTS]字符串数组;然后用 getopt_long_only() 解析命令; switch选项处理命令。 videoIn = malloc(sizeof(struct vdIn));/*分配webcam结构体*/ memset(videoIn, 0, sizeof(struct vdIn));/*结构体成员清零*/ /*显示我们设置的参数*/ IPRINT("Using V4L2 device.: %s\n", dev); IPRINT("Desired Resolution: %i x %i\n", width, height); IPRINT("Frames Per Second.: %i\n", fps); IPRINT("Format............:%s\n", (format==V4L2_PIX_FMT_YUYV)?"YUV":"MJPEG"); if ( format == V4L2_PIX_FMT_YUYV ) IPRINT("JPEG Quality......: %d\n", gquality);

madplay播放器和mjpg-streamer视频服务器移植文档汇总

madplay播放器和mjpg-streamer视频服务器移植文档汇总

MP3播放器(一)移植madplay播放器开源软件,实施步骤:a)安装WM8960声卡驱动i.从ftp/project/获取声卡驱动sound_driver.rar1.在windows解压缩,获取一下文件内容a)audio_logo_rhgz_wm.tar.gz,针对于开发板背面标注”融汇广泽”的声卡驱动b)audio_logo_tarena_wm.tar.gz,针对于开发板背面标注”Tarena”的声卡驱动注意:自行选择适合自己的驱动包,然后在windows下解压缩,获取文件:build.sh //驱动安装脚本s5pv210_wm8960.ko //wm8960声卡IO初始化驱动wm8960.ko //wm8960声卡驱动ii.创建驱动存放目录1.mkdir /opt/project/drivers/wm89602.cp build.sh /opt/project/drivers/wm8960/3.cp s5pv210_wm8960.ko /opt/project/drivers/wm8960/4.cp wm8960.ko /opt/project/drivers/wm8960/iii.拷贝驱动到开发板1.cp build.sh /opt/rootfs/home/drivers/2.cp s5pv210_wm8960.ko /opt/rootfs/home/drivers/3.cp wm8960.ko /opt/rootfs/home/drivers/b)移植libmad解码底层操作库1.从ftp/project获取libmad源码libmad-0.15.1b.tar.gz2.创建libmad源码存放目录a)mkdir /opt/project/mp3/b)cp libmad-0.15.1b.tar.gz /opt/project/mp3c)cd /opt/project/mp3d)tar –xvf libmad-0.15.1b.tar.gze)cd libmad-0.15.1bf)make cleang) ./configure CC=arm-linux-gcc --host=arm-linux--prefix=/opt/project/mp3/to_arm//指定编译生成的动态库的安装目录为/opt/project/mp3/to_arm/h)makei)make installj)查看编译成果cd /opt/project/mp3/to_armc)移植libid3tag开源MP3 TAG库,它依赖libz库i.先移植libz库a)从ftp/project下载源码zlib-1.2.3.tar.gzb)cp zlib-1.2.3.tar.gz /opt/project/mp3c)cd /opt/project/mp3d)tar -xvf zlib-1.2.3.tar.gze)cd zlib-1.2.3f)make cleang)./configure --shared --prefix=/opt/project/mp3/to_armh)vi Makefilei)19 CC=arm-linux-gcc //在第19行1.(只是将gcc变成arm-linux-gcc)j)28 LDSHARED=arm-linux-gcc //在第28行k)29 CPP=arm-linux-gcc -El)36 AR=arm-linux-ar rcm)37 RANLIB=arm-linux-ranlibn)保存退出o)makep)make installii.再移植libid3tag库a)从ftp/project/获取源码libid3tag-0.15.1b.tar.gzb)cp libid3tag-0.15.1b.tar.gz /opt/project/mp3c)cd /opt/project/mp3/d)tar -xvf libid3tag-0.15.1b.tar.gze)cd libid3tag-0.15.1bf)./configure CC=arm-linux-gcc --host=arm-linux--prefix=/opt/project/mp3/to_armg)makeh)make installd)移植madplay播放器1.从ftp/project/获取源码madplay-0.15.2b.tar.gz2.cp madplay-0.15.2b.tar.gz /opt/project/mp3/3.cd /opt/project/mp34.tar -xvf madplay-0.15.2b.tar.gz5.cd madplay-0.15.2b6../configure CC=arm-linux-gcc --host=arm-linux--prefix=/opt/project/mp3/to_arm7.make8.make installe)开发板测试1.拷贝交叉编译后生成的动态库和可执行程序到开发板a)mkdir /opt/rootfs/home/mp3b)mkdir /opt/rootfs/home/mp3/songc)cp /opt/project/mp3/to_arm/lib/opt/project/mp3/to_arm/bin/madplay/opt/rootfs/home/mp3 –frdd)cp shanghaitan.mp3 /opt/rootfs/home/mp3/song //拷贝歌曲到开发板e)vim /opt/rootfs/etc/profile 文件最后添加动态库的环境变量exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/mp3/lib2.开发板执行a)cd /home/drivers/b)./build.sh //安装声卡驱动c)/home/mp3/bin/madpaly/home/mp3/song/shanghaitan.mp3f)熟悉madplay参数的使用i.–r //重复执行1./home/mp3/bin/madplay -r /home/mp3/song/*.mp3 //重复播放所有的歌曲ii.按键盘的“-”减号降低音量iii.按键盘的”+”加号升高音量iv.按键盘的”s”停止播放v.按键盘的”c”继续播放vi.按键盘的”>”下一首vii.按键盘的”f”上一首g)改造madplay源码支持网络控制播放器的操作i.cd /opt/project/mp3/madplay-0.15.2bii.vim player.c +120 定义udp套接字文件描述符1.static int socketfd = -1;保存退出iii.vim player.c //找到setup_tty函数,在函数开头以下代码:/* 创建server端*/socketfd = socket(PF_INET,SOCK_DGRAM,0);if(socketfd<0){perror("socket");return -1;}struct sockaddr_in si;si.sin_family = AF_INET;si.sin_port = htons(2000);si.sin_addr.s_addr = INADDR_ANY;if(bind(socketfd,(struct sockaddr*)&si, sizeof(si))<0){perror("bind");return -1;}保存退出iv.vim player.c 找到tty_filter函数struct player *player = data;enum mad_flow flow = MAD_FLOW_CONTINUE;int command = 0, stopped = 0;//command = readkey(0); //注释掉词句,不再响应按键操作//并且在后面添加网络控制支持代码,如下://获取网络数据recvfrom(socketfd, &command, 4, MSG_DONTWAIT, NULL, 0);然后将后面的://command = readkey(1); //注释掉,不再相应按键操作添加网络读取的代码:recvfrom(socketfd, &command, 4, 0, NULL, 0);保存退出v.重新编译maplay1.make clean2.make3.make install4.cp /opt/project/mp3/bin/madplay /opt/rootfs/home/mp3/bin/vi.编写mp3播放操作库函数1.从ftp/project/下载参考代码mp3_hwlib.tar.bz2a)Mp3.h //声明b)Mp3.c //定义c)Mp3lib_test.c //调用测试vii.编写QT前端播放器界面a)从ftp/project/下载参考代码mp3_qt.tar.bz2mjpg-streamer视频服务器移植(二)移植mjpg-streamer视频服务器,实施步骤:a)Linux虚拟机上搭建mjgp-streamer视频服务器,实施步骤i.首先虚拟机linux安装jpeg图片处理库1.创建源码存放目录a)mkdir /opt/project/mjpg-streamerb)从ftp/project/获取源码jpegsrc.v6b.tar.gzc)cp jpegsrc.v6b.tar.gz /opt/project/mjpg-streamer/d)cd /opt/project/mjgp-streamere)tar –xvf jpegsrc.v6b.tar.gzf)cd jpeg-6bg)./configure --enable-sharedh)make //编译i)sudo make installii.最后编译mjpg-streamera)从ftp/project/获取源码mjpg-streamer-r63.tar.gzb)cp mjpg-streamer-r63.tar.gz /opt/project/mjpg-streamer/c)cd /opt/project/mjpg-streamerd)tar -xvf mjpg-streamer-r63.tar.gze)cd mjpg-streamer-r63f)从2.6内核版本中拷贝该头文件到系统目录i.sudo cp /opt/kernel/include/linux/videodev.h /usr/include/linux/ii.sudo vim /usr/include/linux/videodev.h +166struct video_clip /*__user*/ * clips; //将__user注释掉iii.保存退出iv.makeiii.Linux虚拟机启动mjpg-streamer视频服务器i.cd /opt/project/mjpg-streamer/mjpg-streamer-r63ii.执行 ./start 或者执行:./mjpg_streamer -i "./input_testpicture.so -r 320x240-d 500" -o "./output_http.so -w www"iii.在虚拟机中打开firefox浏览器,输入127.0.0.1:80801.点击浏览器界面的static 获取静态图片2.点击stream获取视频b)移植mjpeg_streamer视频服务器到开发板a)cd /opt/project/mjpg-streamer/b)mv mjpg-streamer-r63 mjpg-streamer-r63-PCc)tar -xvf mjpg-streamer-r63.tar.gzd)mv mjpg-streamer-r63 mjpg-streamer-r63-ARMe)cd mjpg-streamer-r63-ARMf)find ./ -name "Makefile" -exec sed -i "s/CC = gcc/CC =arm-linux-gcc/g" {} \; //指定交叉编译器g)makeh)创建目标文件存放目录i.mkdir /opt/rootfs/home/mjpg-streameri)cp -frd *.so mjpg_streamer start.sh www/ /opt/rootfs/home/mjpg-streamerj)开发板测试i.cd /home/mjpg-streamer/ii../start.shiii.在虚拟机浏览器输入开发板ip测试:http://192.168.1.110:8080/stream.htmlUSB摄像头驱动移植1.内核添加支持UVC摄像头驱动,对内核源码执行以下命令cd /opt/kernelmake menuconfigDevice Drivers---><*> Multimedia support---><*> Video For Linux[*] Video capture adapters--->[*]V4L USB devices ---><*> USB Video Class (UVC)Device Drivers--->[*] HID Devices--->special HID drivers---><*> Logitechmake zImagecp arch/arm/boot/zImage /tftpboot重启开发板2.mjpg-steamer服务器获取USB摄像头数据,浏览器获取显示视频a)sudo vim /opt/rootfs/home/mjpg-streamer/start.sh +64注释64行,然后删除65行的注释//把第65行的/dev/video0修改为/dev/video3,修改以后的内容如下:./mjpg_streamer -i "./input_uvc.so -r 320x240 -d /dev/video3 -f30" -o "./output_http.so -w www"保存退出b)开发板运行:1.cd /home/mjpg-streamer/2../start.sh //提示libjpeg库找不到,请到交叉编译器中获取3.在虚拟机浏览器输入开发板ip测试:http://192.168.1.110:8080/stream.html3.mjpg-steamer源码分析a)建立sourceinsight工程4.编写mjpg-streamer客户端代码a)ftp/project/下载UC客户端代码jpeg.cb)ftp/project/下载QT客户端代码mjpg_client_QTcp.tar.bz2USB接口wifi模块rtl8188eu驱动移植和热点配置1.获取wifi模块rtl8188eu驱动a)从ftp/project/下载rtl8188eu_USB_linux.tar.gzb)驱动源码操作:mkdir /opt/project/drivers/wificp rtl8188eu_USB_linux.tar.gz /opt/project/drivers/wificd /opt/project/drivers/wifitar -xvf rtl8188eu_USB_linux.tar.gzcd 8188eu_USB_linux/driver/rtl8188euvim Makefile修改驱动程序的Makefile:41 CONFIG_PLATFORM_I386_PC = n //由原先为y修改为n43CONFIG_PLATFORM_ARM_S3C2K4 = y //由原先为n修改为y351 KVER := 2.6.35.7 //修改内核版本352 KSRC := /opt/kernel //指定内核源码路径make编译得到驱动模块8188eu.ko把驱动模块拷贝到开发板cp 8188eu.ko /opt/rootfs/home/drivers/c)开发板执行:insmod /home/drivers/8188eu.kocat /proc/net/wireless如果存在wlan0说明网卡驱动安装成功设置当前wifi的ip:ifconfig wlan0 192.168.2.12.wifi热点配置hostapd功能:把无线网卡切换到master模式,模拟AP功能1)编译cd/opt/project/drivers/wifi/8188eu_USB_linux/wpa_supplicant_h ostapdunzip wpa_supplicant_hostapd-0.8_rtw_20120803.zipcd wpa_supplicant_hostapd-0.8/hostapd指定arm-linux-gcc编译器可以直接修改Makefile或者指定CC环境变量,执行:export CC=arm-linux-gccmake2)应用拷贝hostapd应用程序到开发板mkdir /opt/rootfs/home/wificp hostapd /opt/rootfs/home/wificd/opt/project/drivers/wifi/8188eu_USB_linux/wpa_supplicant_h ostapdcp rtl_hostapd_2G.conf /opt/rootfs/etc关于配置文件可以参考源码目录的配置文件rtl_hostapd_2G.conf配置内容:interface=wlan0 //网络设备节点ssid=mywifi //热点名字wpa_passphrase=87654321 //密码wpa_key_mgmt=WPA-PSK //加密方式在开发板运行:cd /home/wifimkdir /var/run/./hostapd /etc/rtl_hostapd_2G.conf -B产生wifi热点“mywifi”,直接连接会卡在正在获取IP,原因没有动态分配IP给客户端3. 动态分配IP给客户端使用开源软件dnsmasq功能:1)DHCP 动态分配IP2)DNS 域名解析从ftp下载dnsmasq-2.66.tar.gzmkdir /opt/project/dnscp dnsmasq-2.66.tar.gz /opt/project/dnscd /opt/project/dnstar -xvf dnsmasq-2.66.tar.gzcd dnsmasq-2.66编译:指定arm-linux-gcc编译器(通过环境变量修改)export CC=arm-linux-gccmakemkdir /opt/rootfs/home/dnscp ./src/dnsmasq /opt/rootfs/home/dns/修改配置文件dnsmasq.conf可以参数源码目录的配置文件:dnsmasq.conf.example vim dnsmasq.conf //修改为如下内容95 interface=wlan0101 listen-address=192.168.2.1,127.0.0.1134 domain=146dhcp-range=192.168.2.1,192.168.2.150,255.255.255.0,12h 217 dhcp-host=11:22:33:44:55:66,192.168.2.1313 dhcp-option=3,192.168.2.1cp dnsmasq.conf /opt/rootfs/etc/cp passwd /opt/rootfs/etccp hosts /opt/rootfs/etc在开发板运行:cd /home/dns./dnsmasq -C /etc/dnsmasq.conf测试用手机直接连接热点mywifi,密码87654321在开发板运行mjpg-stream服务器cd /home/mjpg-streamer./start.sh如果手机连接成功,可以通过ip:192.168.2.1()访问//注意start.sh,其内容如下:vim /opt/rootfs/home/mjpg-streamer/start.sh/home/mjpg-streamer/mjpg_streamer -i "/home/mjpg-streamer/input_uvc.so -r 320x240 -d /dev/video0 -f 30" -o "/home/mjpg-streamer/output_http.so -w www –p 80"。

开源视频服务器软件MJPG_streamer的研究和应用_陈书益

开源视频服务器软件MJPG_streamer的研究和应用_陈书益

开源视频服务器软件MJPG -streamer 的研究和应用陈书益,黄永慧(广东工业大学自动化学院,广东广州510006)摘要:针对嵌入式设备在进行多媒体数据处理时存在的资源限制问题,采用了一种开源视频服务器软件MJPG-streamer 完成多媒体数据的处理及存储,基于该软件的特点和体系结构,通过修改MJPG-streamer 的源代码,添加新的功能模块,以增强这款软件的功能。

并重新交叉编译后,移植到嵌入式系统中,以实现一个可控制前端设备的基于Arm9的嵌入式远程视频监控系统。

实验结果表明,该方法很好地增强了视频数据处理的效果,并可流畅地在客户端播放浏览器。

关键词:MJPG-streamer ;开源;视频服务器;插件;嵌入式应用中图分类号:TP311.1文献标识码:A文章编号:1674-6236(2012)05-0172-05Research and application of open source video server MJPG -streamerCHEN Shu -yi ,HUANG Yong -hui(Faculty of Automation ,Guangdong University of Technology ,Guangzhou 510006,China )Abstract:For the resource limit of multimedia data processing in embedded device ,an open source video server software MJPG -streamer to implement the processing and storage of multimedia data is used.The source code is modified and a new plug-in in this software to enhance its function is added ,based on the features and architecture of this software.Transplant it to the embedded systems after cross -compile ,to implement a video surveillance system based on Arm9,which also can control a front -end equipment.The experimental result shows that this method can enhance the function of video data processing ,and the video can be played fluently in client browser.Key words:MJPG -streamer ;open source ;video server ;plug -in ;embedded application收稿日期:2011-11-09稿件编号:201111052基金项目:广东省高等学校大学生创新实验项目(184510035)作者简介:陈书益(1989—),男,广东韶关人。

基于MJPG—streamer的嵌入式远程视频监控系统

基于MJPG—streamer的嵌入式远程视频监控系统
Z h a o Da n , C h e n J i a n f e i ~, Z h o u X u a n , De n g Mi n , T a n g L i j u n ’
( 1 . S c h o o l o f P h y s i c s & El e c t r o n i c , Ch a n g s h a Un i v e r s i t y o f S c i e n c e  ̄Te c h n o l o g y, Ch a n g s h a 4 1 0 1 1 4, Ch i n a ;
s t r e a me r流媒 体服 务 器 来 完 成 视 频 数 据 的 采 集 和 传 输 。测 试 结 果表 明 , 该方案在 帧率 1 0 f p s 、 分辨 率 6 4 0 ×4 8 0情 况 下 ,
能 实现 流 畅 清 晰 的视 频 传 输 , 且 平 均 占用 带 宽 约 2 0 0 Kb / s , 能 满足 远 程 实验 的 需 求 。
wa r e p l a t f o r m. Th e p r o g r a m u s e s t h e US B c a me r a t o c a p t u r e v i d e o i n f o r ma t i o n, b u i l d s MJ PG - s t r e a me r s t r e a mi n g me d i a s e r v e r t o c o m—
pl e t e t h e c om pr e s s i on of t h e v i d e o da t a a n d r e a l — t i me t r a ns mi s s i on. The t e s t r e s u l t s s h o w t ha t t he a ve r a g e ba nd wi d t h o f t he vi de o t r a ns —

mjpg-streamer在树莓派上的视频技术应用

mjpg-streamer在树莓派上的视频技术应用

第36卷 第9期 福 建 电 脑 Vol. 36 No.92020年9月Journal of Fujian ComputerSep. 2020———————————————本文得到广东水利电力职业技术学院一流高职科学研究和社会服务能力建设基金项目(No.GX030102y14)资助。

熊丽华,女,1978年生,主要研究领域为计算机应用技术。

E-mail:**************。

mjpg-streamer 在树莓派上的视频技术应用熊丽华(广东水利电力职业技术学院计算机信息工程系 广州 510635)摘 要mjpg-streamer 是一款功能强大的开源视频流传送程序,能够简化视频监控的相关开发工作。

本文首先对树莓派上的视频监控技术进行了概述,然后对mjpg-streamer 软件的主要特征进行了分析,并就mjpg-streamer 的安装和摄像头的控制进行了讨论,为学习如何在树莓派上利用mjpg-streamer 技术实现视频监控提供了良好的指引。

关键词 视频监控;树莓派;mjpg-streamer中图法分类号 TP391.41 DOI:10.16707/ki.fjpc.2020.09.030Research on the Application of Mjpg-streamer in Raspberry-PiXIONG Lihua(Department of Computer Information Engineering, Guangdong Polytechnic of Water Resources and Electric Engineering, Guangzhou, China, 510635)1引言树莓派是功能强大的微型电脑,可以用于开展各种物联网应用实验,在学校的IT 人才培养和科学实验中有着广泛的用途[1]。

视频监控是树莓派的重要应用分支,如何实时远程访问树莓派上的USB 摄像头捕获的图像,有众多的解决方案。

基于MJPG-streamer的嵌入式远程视频监控系统

基于MJPG-streamer的嵌入式远程视频监控系统

基于MJPG-streamer的嵌入式远程视频监控系统赵丹;谌建飞;周旋;邓敏;唐立军【摘要】针对远程实验操作中实验动态信息可视化及实时性问题,利用ARM处理器和USB摄像头设计一个基于MJPG-streamer的嵌入式远程视频监控系统.该系统使用基于硬件压缩的USB摄像头进行视频信息采集,搭建MJPG-streamer流媒体服务器来完成视频数据的采集和传输.测试结果表明,该方案在帧率10 fps、分辨率640×480情况下,能实现流畅清晰的视频传输,且平均占用带宽约200 Kb/s,能满足远程实验的需求.%Aiming at the need of using video to assist users to carry out experimental operation and acquire the real-time experimental dynamic information in the course of remote experiment,an embedded remote video monitoring system based on MJPG-streamer is designed,which chooses ARM development board and the USB camera as the hardware platform and Linux operating system as the software platform.The program uses the USB camera to capture video information,builds MJPG-streamer streaming media server to complete the compression of the video data and real-time transmission.The test results show that the average bandwidth of the video transmission is about 200 Kb/s in the case of 10 fps and 640 * 480,which can meet the needs of remote experiment.【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2017(017)004【总页数】4页(P51-54)【关键词】远程实验;视频监控;MJPG-streamer;嵌入式应用【作者】赵丹;谌建飞;周旋;邓敏;唐立军【作者单位】长沙理工大学物理与电子科学学院,长沙410114;近地空间电磁环境监测与建模湖南省普通高校重点实验室;长沙理工大学物理与电子科学学院,长沙410114;近地空间电磁环境监测与建模湖南省普通高校重点实验室;长沙理工大学物理与电子科学学院,长沙410114;近地空间电磁环境监测与建模湖南省普通高校重点实验室;长沙理工大学物理与电子科学学院,长沙410114;近地空间电磁环境监测与建模湖南省普通高校重点实验室;长沙理工大学物理与电子科学学院,长沙410114;近地空间电磁环境监测与建模湖南省普通高校重点实验室【正文语种】中文【中图分类】TP315基于互联网的远程实验教学模式打破了时间与空间的限制,实现了仪器设备的共享,有效地提高了实验资源利用率和实验效率[1-3]。

mjpg-streamer使用介绍

mjpg-streamer使用介绍

mjpg-streamer使⽤介绍前⼏天⾃⼰没事玩了⼀下mjpg-streamer,感觉还不错,这⾥结合⽹上的⼀些资料和⾃⼰的⼼得把主要步骤贴出来供⼤家参考⼀下:ps:我在ubuntu11.10和12.04⾥⾯都是过,按照以下步骤都没什么问题,我的内核版本是3.2.0的,摄像头使⽤的是ZC0301PL,开发板是杂牌的,ARM11,核⼼芯⽚是S3C6410。

PC上也是可以运⾏的,并不⼀定⾮要使⽤开发板,根据需要修改⼀下Makefile就可以了。

Linux内核采⽤Linux 2.6.32版本,运⾏make menuconfig配置万能驱动USB摄像头,在Device Drivers下,选择Multimedia device,选择Video Capture adapters,选择V4L USB devices,选择GSPA based webcams,即可选择万能驱动USB摄像头。

系统采⽤Yaffs⽂件系统,Yaffs是专为嵌⼊式系统使⽤NAND型闪存⽽设计的⼀种⽇志型⽂件系统。

它减少了⼀些功能,速度更快,挂载时间很短,对内存的占⽤较⼩,所以系统采⽤Yaffs⽂件系统。

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

MJPG-stream er源码包可从SourceForge⽹站下载使⽤。

各个⽂件如下:(1)input_testpicture.so。

这是⼀个图像测试插件,它将预设好的图像编译成⼀个头⽂件,可以在没有摄像头的情况下传输图像,从⽽⽅便调试程序。

(2)input_uvc.so。

基于Mjpg-streamer的跨平台无线视频传输系统

基于Mjpg-streamer的跨平台无线视频传输系统

基于Mjpg-streamer的跨平台无线视频传输系统祝朝政;张毅伟;程禹嘉;严锡君【摘要】为了解决基于Mjpg-streamer的远程视频系统只能通过特定浏览器查看与,可移植性差的问题,开发了采用QT框架的视频解码客户端,实现了跨平台的实时观测,改变了原系统对于浏览器的依赖性,提高了Mjpg-streamer远程视频系统的可移植性,使得系统的适用范围及使用方式更加宽泛及大众化。

%In order to solve the problems that remote video system based on Mjpg-streamer only can be viewed through a particular browser and has poor portability, videodecoding using QT framework is developed in the client side to realize the real-time observation of cross-platform. It changes the dependence on browsers of original system, and enhances the portability of Mjpg-streamer remote video system, which makes theusage scope and mode of the system wider and more popular.【期刊名称】《微型电脑应用》【年(卷),期】2016(032)001【总页数】3页(P57-59)【关键词】视频解码;QT;跨平台;Mjpg-streamer【作者】祝朝政;张毅伟;程禹嘉;严锡君【作者单位】河海大学计算机与信息学院,南京,210098;河海大学计算机与信息学院,南京,210098;河海大学计算机与信息学院,南京,210098;河海大学计算机与信息学院,南京,210098【正文语种】中文【中图分类】TP393近年来,基于Mjpg-streamer的远程视频系统随着嵌入式技术,多媒体技术,计算机网络安全技术的快速发展也在不断的更新与发展。

MJPG-streamer源码简析

MJPG-streamer源码简析

MJPG-streamer源码简析 MJPG-streamer主体上是由main函数和输⼊插件、输出插件组成。

软件运⾏的流程是先对摄像头进⾏初始化然后设置基本的输⼊输出参数,接着从摄像头中获取数据放到全局内存中,然后通知输出函数来取出,接着输出。

摄像头的初始化由结构体vdIn来进⾏。

1struct vdIn {2int fd;3char *videodevice;4char *status;5char *pictName;6struct v4l2_capability cap;7struct v4l2_format fmt;8struct v4l2_buffer buf;9struct v4l2_requestbuffers rb;10void *mem[NB_BUFFER];11 unsigned char *tmpbuffer;12 unsigned char *framebuffer;13int isstreaming;14int grabmethod;15int width;16int height;17int fps;18int formatIn;19int formatOut;20int framesizeIn;21int signalquit;22int toggleAvi;23int getPict;24int rawFrameCapture;25/* raw frame capture */26 unsigned int fileCounter;27/* raw frame stream capture */28 unsigned int rfsFramesWritten;29 unsigned int rfsBytesWritten;30/* raw stream capture */31 FILE *captureFile;32 unsigned int framesWritten;33 unsigned int bytesWritten;34int framecount;35int recordstart;36int recordtime;37 }; 数据传输的开始、停⽌、结束等函数在输⼊插件中,它们有⼀个结构体output统领着。

openwrt挂载摄像头MJPG-streamer完全教程

openwrt挂载摄像头MJPG-streamer完全教程

openwrt挂载摄像头MJPG-streamer完全教程老早就想玩玩这个摄像头挂载的功能,但是一直太懒。

昨天强迫自己抛弃LOL,找到几年前买的清华同方的摄像头,试试能不能成功!如果没有摄像头建议参照下面的文章买一个支持的openwrt摄像头选购指南1、安装相关驱动和软件百度下找教程,按照网友说的固件中打上以下选项,都是摄像头相关的驱动和USB识别opkg kmod-usb2opkg install kmod-usb-ohci #一般BCM用的是ohci USB控制器opkg install kmod-usb-videoopkg install kmod-video-gspca-coreopkg install kmod-video-coreopkg install kmod-video-uvc #免驱uvc摄像头opkg install kmod-video-gspca-zc3xx #中微星摄像头如zc301 zc303 zc305opkg install kmod-i2c-coreopkg install kmod-input-core由于我不知道我的清华同方的摄像头是否支持UVC,所以索性把所有的关于video相关的都打上,先能正确使用再说。

然后在找到mjpg-streamer打上,找到luci-app-mjpg-streamer打上,如果能打上lsusb和blkid最好lsusb是可以看出来这个USB设备是什么厂商的,pid vid是什么。

blkid其实和摄像头无关吧,是和U盘格式有关的命令,具体请看openwrt下使用blkid获取U盘文件系统格式ok编译固件就行了!如果使用的是别人的固件,那么安装这些依赖吧,安装软件的方法openwrt安装软件的两个方法2、识别设备插上摄像头,因为是USB的,所以可以热插拔,插上后用dmesg 会有相关的信息显示,用lsusb命令可以看出来厂商名称等信息然后进入/dev/目录下,会发现video0或者video1、video2设备名称,说明已经正确识别了!3、启动设备进入luci界面->”服务serivices”->”mjpg-streamer”这就是设置参数的地方了,enable打上、流传输选择为http、驱动选择为UVC,下面的选择最重要了,直接关系到是否能正确启动和出现画面选择识别到的设备名称video0,设置分辨率和fps,是否支持YUYV格式要看你的设备了,中星微的貌似都支持MJPEG格式点击保存应用,看到后台有个mjpg-streamer进程说明启动了4、问题初现“stream unavaliable”浏览器打开http://网关ip:8080,看到是空白的,没有画面信息问题的表象就是mjpg-streamer 不显示在设置界面出现“stream unavaliable”信息,如下截图这说明没成功啊!!为嘛。

Qt接收mjpg-streamer视频流解析

Qt接收mjpg-streamer视频流解析

利用Qt的label控件以图片格式接收mjpg-streamer视频流核心思想:就是利用定时器QTimer定时向服务器请求下载一张图片(也是QT网络中http 编程啦)1、利用到的类有QPixmap,Qlabel,QTimer,QThread,QFileDialog,QDir,其中我为了布局稍微美观点,加了Phonon类来实现简易音乐播放器,该类对音乐文件有要求,wmv,wmw 等一些格式(可用软件格式工厂来转换音乐格式),有一些类是当时学习时为实现功能加的,忘了删掉,但是没问题的。

2、声明Qt库版本为4.8.5版本3、以下为cpp内容#include"mainwindow.h"#include"ui_mainwindow.h"#include"QPixmap"#include"QLabel"#include"QtCore"#include"QTimer"#include"QThread"#include"software.h"#include"phonon/phonon"#include"QFileDialog"#include"QDir"#include"QDesktopServices"MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);//setWindowFlags(Qt::FramelessWindowHint|Qt::WindowSystemMenuHint|Qt: :WindowMinimizeButtonHint);//无边框img=new QImage;scaledimg=new QImage;this->setWindowTitle("实时视频监控(作者:存w在QQ:1206110987)");SetWindow();InitStatusBar();//初始化状态栏Mkdirfile();showTime=new QTimer;showTime->setInterval(100);//毫秒级QObject::connect(showTime,SIGNAL(timeout()),this,SLOT(flushPic()));manager=new QNetworkAccessManager(this);QObject::connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(s lot_replyFinished(QNetworkReply*)));QObject::connect(ui->Openaction,SIGNAL(triggered()),this,SLOT(OpenFil eNameSlot()));QObject::connect(ui->Quitaction,SIGNAL(triggered()),qApp,SLOT(quit()) );QObject::connect(ui->AboutQtaction,SIGNAL(triggered()),qApp,SLOT(abou tQt()));//关于QtQObject::connect(ui->Softwareaction,SIGNAL(triggered()),this,SLOT(slo t_software()));//关于软件QObject::connect(ui->LANaction,SIGNAL(triggered()),this,SLOT(slot_LAN ()));QObject::connect(ui->WANaction,SIGNAL(triggered()),this,SLOT(slot_WAN ()));button_movieIsClicked=false;//初始化ButtonMovie按钮的状态IsLan=true;//初始化内网模式//音频audio=new Phonon::MediaObject(this);//媒体对象audio->setTickInterval(1);audioOutput=newPhonon::AudioOutput(Phonon::MusicCategory,this);//音频输出Phonon::createPath(audio,audioOutput);//连接媒体对象与音频输出volumeSlider=new Phonon::VolumeSlider(audioOutput,this);//音量滑动条volumeSlider->move(650,520);volumeSlider->resize(200,20);volumeSlider->setStyleSheet("background-color:rgb(255,255,255,100)");volumeSlider->setFixedWidth(100);//固定音量条大小seekSlider=new Phonon::SeekSlider(audio,this);//进度滑动条seekSlider->move(250,525);seekSlider->resize(350,20);seekSlider->setStyleSheet("background-color:rgb(255,255,255,100)");creatActions();QObject::connect(audio,SIGNAL(tick(qint64)),this,SLOT(UpdateTime(qint64)));//时间更新QObject::connect(audio,SIGNAL(aboutToFinish()),this,SLOT(AboutToFinish()));QObject::connect(ui->OpenWAVaction,SIGNAL(triggered()),this,SLOT(slot _OpenMusic()));musicInformationMediaObject=new Phonon::MediaObject(this);//音乐信息对象metaInformationAudioOutput=newPhonon::AudioOutput(Phonon::MusicCategory,this);Phonon::createPath(musicInformationMediaObject, metaInformationAudioOutput);QObject::connect(ui->tableWidget,SIGNAL(customContextMenuRequested(const QPoint&)),this,SLOT(ShowContextMenu(const QPoint&)));QObject::connect(audio,SIGNAL(stateChanged(Phonon::State, Phonon::State)),this,SLOT(StateChanged(Phonon::State,Phonon::State)));QObject::connect(musicInformationMediaObject,SIGNAL(stateChanged(Phonon::State,Phonon::State)),this,SLOT(MetaStateChanged(Phonon::State,Phonon::State)));QObject::connect(audio,SIGNAL(currentSourceChanged(Phonon::MediaSource)),this,SLOT(SourceChanged(Phonon::MediaSource)));QObject::connect(ui->tableWidget,SIGNAL(cellDoubleClicked(int,int)),t his,SLOT(tableClicked(int)));}MainWindow::~MainWindow(){delete ui;QFile::remove("mjpg-streamer/temp1.jpg");}void MainWindow::slot_replyFinished(QNetworkReply*reply){if(button_movieIsClicked==true){QPixmap pix;QByteArray data=reply->readAll();pix.loadFromData(data,"JPG");pix.save("mjpg-streamer/tmp1.jpg","JPG",100);//文件名图像格式压缩率图片质量if(!(img->load("mjpg-streamer/tmp1.jpg"))){showTime->stop();QMessageBox::information(this,tr("打开图像失败"),tr("打开图像失败!"));button_movieIsClicked=false;return;}*scaledimg=img->scaled(640,480,Qt::KeepAspectRatio);ui->PicLabel->setPixmap(QPixmap::fromImage(*scaledimg));}else{QPixmap pixmap(":/new/prefix1/背景.jpg");ui->PicLabel->setPixmap(pixmap);}}void MainWindow::flushPic(){request.setUrl(QUrl(PU));manager->get(request);}void MainWindow::SetWindow(){this->resize(861,572);ui->PicLabel->setGeometry(230,0,640,480);//ui->PicLabel->setText("视频通道一");ui->ButtonMovie->setGeometry(10,160,51,23);ui->PicLabel->setFrameShape(QFrame::Box);//边框ui->PicLabel->setStyleSheet("border:2px solidblack");//#999999");//红色边框风格ff0000ui->PicLabel->setStyleSheet("QLabel{border-image:url(:/new/prefix1/wi fi.jpg);}");ui->TaiLongLabel->setStyleSheet("QLabel{border-image:url(:/new/prefix 1/TaiLong.png);}");ui->ButtonMovie->setText("视频");}void MainWindow::InitStatusBar()//初始化状态栏{QStatusBar*bar=ui->statusBar;//获取状态栏first_statusLabel=new QLabel;//新建标签first_statusLabel->setMinimumSize(100,10);//设置标签最小尺寸//first_statusLabel->setFrameShape(QFrame::WinPanel);//设置标签形状first_statusLabel->setFrameShadow(QFrame::Sunken);//设置标签阴影second_statusLabel=new QLabel;second_statusLabel->setMinimumSize(200,10);//second_statusLabel->setFrameShape(QFrame::WinPanel);second_statusLabel->setFrameShadow(QFrame::Sunken);bar->addWidget(first_statusLabel);bar->addWidget(second_statusLabel);QDateTime time=QDateTime::currentDateTime();//获取系统现在的时间QString str=time.toString("yyyy-MM-dd hh:mm:ss ddd");//设置显示格式first_statusLabel->setText(tr("就绪"));//初始化内容second_statusLabel->setText(str);//在标签上显示时间}void MainWindow::Mkdirfile(){/*QDir*temp=new QDir;bool exist=temp->exists("F://temp");//if(exist)//QMessageBox::information(this,tr("创建文件夹"),tr("文件夹已经存在!"));if(!exist){temp->mkdir("F://temp");}*/if(!QDir("mjpg-streamer").exists())//相对路径{QDir dir;dir.mkpath("mjpg-streamer");}if(!QDir("photos").exists()){QDir dir;dir.mkpath("photos");}if(!QDir("Musics").exists()){QDir dir;dir.mkpath("Musics");}}void MainWindow::slot_software()//关于软件dialog窗口{SoftWare*aboutsoftware=new SoftWare;aboutsoftware->show();}void MainWindow::slot_WAN(){IsLan=false;QMessageBox::information(this,tr("模式切换"),tr("远程视频模式!"));}void MainWindow::slot_LAN(){IsLan=true;QMessageBox::information(this,tr("模式切换"),tr("内网视频模式!")); }void MainWindow::on_ButtonMovie_clicked(){if(IsLan==true)//判断是否为内网视频{Address=ui->AddressLineEdit->text();Port=ui->PortlineEdit->text();PU="http://"+Address+":"+Port+"/?action=snapshot";}else{RemoteAddress=ui->RemoteLineEdit->text();RemotePort=ui->RemotePortlineEdit->text();PU="http://"+RemoteAddress+"/?action=snapshot";}if(button_movieIsClicked==false){button_movieIsClicked=true;ui->ButtonMovie->setText("结束");showTime->start();}else{button_movieIsClicked=false;ui->ButtonMovie->setText("视频");showTime->stop();}}void MainWindow::on_ScreenshotButton_clicked()//截图{QString str_time,photo;QDateTime time=QDateTime::currentDateTime();str_time=time.toString("yyyy-MM-dd hh-mm-ss");photo="photos/"+str_time+".jpg";QPixmap::fromImage(*img).save(photo,"JPG",100);//和load相似/*QMessageBox::information(this,tr("save"),tr("PICTURE has been saved to folder'photo!'"));*/}void MainWindow::OpenFileNameSlot(){QString FileName=QFileDialog::getOpenFileName(this,tr("打开图片"),"temp",tr("Images (*.png*.xpm*.jpg)"));if(FileName.isEmpty()){QMessageBox::information(this,"错误信息","请选择图片");return;}QImage src(FileName);ui->PicLabel->setPixmap(QPixmap::fromImage(src));}//以下为音频输出函数void MainWindow::creatActions(){ui->Next->setEnabled(false);ui->Last->setEnabled(false);ui->PlayPause->setEnabled(false);ui->Stop->setEnabled(false);ui->PlayPause->setIcon(QIcon(":/new/prefix1/Pause.png"));ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);ui->tableWidget->setRowCount(0);//一定要初始化行和列作为一个标度ui->tableWidget->setColumnCount(2);ui->tableWidget->setColumnWidth(0,2*ui->tableWidget->width()/3);ui->tableWidget->setColumnWidth(1,ui->tableWidget->width()/3);//ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn );QStringList list;list<<tr("音乐标题")<<tr("时长");ui->tableWidget->setHorizontalHeaderLabels(list);ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection) ;//设置只能选择单行ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);ui->tableWidget->setShowGrid(false);//设置不显示网格}void MainWindow::slot_OpenMusic(){QStringList Lists=QFileDialog::getOpenFileNames(this,tr("打开音乐文件"),"Musics");//,tr("*.wmv"));//使用QFileDialog的getOpenFileNames方法获取若干个音乐文件int index=sourceList.size();QString file;foreach(file,Lists)//使用Qt中的foreach遍历每个选中的文件,将其添加到播放列表中。

基于Linux的MJPG-Streamer视频监控系统实现

基于Linux的MJPG-Streamer视频监控系统实现

Science &Technology Vision科技视界作者简介:刘豪(1983—),男,硕士研究生,工程师,主要研究方向为嵌入式系统。

0引言当前视频监控领域多采用嵌入式系统来实现。

嵌入式系统涵盖了嵌入式硬件平台和嵌入式软件平台,本文将从系统实现的角度来阐述基于嵌入式Linux 的MJPG-Streamer 视频监控系统。

嵌入式Linux 的视频监控技术已广泛应用于多个领域,因此该系统设计实现方案具有一定的实用性和参考价值。

1系统设计方案本系统设计方案中,硬件采用友善之臂的Mini2440开发平台,摄像头采用中星微的USB2.0摄像头,这是一款高性价比的图像数据采集处理器,支持VGA 和SXGA 视频模式,其像素最高达130万。

如图1所示为视频监控系统设计方案原理框图。

USB 摄像头通过USB 接口与Mini2440的USB Host 接口相连。

软件方面,需要在S3C2440上实现USB 摄像头驱动软件,同时在S3C2440处理器上运行MJPG-Streamer 软件,利用MJPG-Streamer 实现的web 服务器功能提供网络访问支持,远程PC 机通过浏览器访问该视频监控系统的web 服务器,MJPG-Streamer 程序将USB 摄像头采集到的视频数据放到后台进行处理,然后通过web 的http 协议将视频数据传输到远端的PC 机,然后通过浏览器显示出来,从而达到远程视频监控的目的。

图1系统设计方案原理框图2USB 摄像头驱动实现2.1UVC 驱动程序实现中星微USB 摄像头的VC0345模块是一个标准的UVC 设备。

本文将在Linux2.6.32内核版本中移植和开发UVC 驱动代码,该驱动代码路径为drivers/media/video/uvc/,通过查看该目录下的Makefile 文件可知每个*.c 文件生成对应的一个*.o 文件。

最后链接成一uvcvideo.o 文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

O.9> D
W5*]./9 0*54+(( E.,9*,- 58 F/.) 81/4).5/
¦§ 4 ª v« ¬ ­ 3EF/ ' d
()*14) 3EF/ G ./) 8E 46,* C3.E+5E+3.4+ 46,* C(),)1( 46,* C0.4)H,-+ ()*14) 3I7<24,0,J.7.)K 4,0 ()*14) 3I7<285*-,) 8-) ()*14) 3I7<2J188+* J18 ()*14) 3I7<2*+L1+()J188+*( *J 35.E C-+-!HM2MNOOPQ# 1/(.9/+E 46,* C)-0J188+*
® v ~ Y 0)6*+,E24*+,)+ v ¯ ° ± 2 V ~ Y
!"#
$%&'()'*+ ./01)2134 Z N ' U , % & [ h i j k l m j ' e k V
n `o p : 9 q b c = rZ N s tu v /wZ N s t u v [ xr Z N yz { | }~ Y 'st v ' G ./01)2134>4 N H ./01)2134 \ ] Z N - . 1 2 3 4 5' H ?@&AB()*+,-+* ZN '
GAFP "
9 " ¦§{ÊËF9 WD,^AEF L,DH-** KA.F,./ DJ /.AE J?EH+ADE
=
!"#$%&'()*(' ?@ABC
%&'(*+,-./-, ¦§ { a¨ © J /\LF)*+,-./-,PH ª. ¦
>
!"#$%&'()*(' ?DEF6
%&'(*+,-./-, ­E ® ¯° a d ± ² 1 ¯ i ³ ´
0,/1 E4 5 6 R S c d _ tu N R S ? @ B E x 9
¡V #$ % %&'()*+,-./-, QG R S TU V ¢ X 4 5 6 £M &' ( )* 2'3""4" + , -. / 0 + 01 * "$56$73$ 7#"7 #!8#"57)#!
Å 7# Æ
Å!Ç
GHIJKC
VDIP7#ຫໍສະໝຸດ <DP!;I-H+,DEAH ]-*AFE ;EFAE--,AEF
7#"7 È 3 É %.,P 7#"7
!"#$%&'() !"#$%&'()*(' *+,-./
!"# $%&
'( ) *+ , - ./ , 0 '( ' 1 !"###$ ! " 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D 9 E F G H I J K L M N O P Q G R S T U V W X %&'()
$%&'()*+,-+* T U , V W T X Y 'Z N [ ./01)2134 \
] Z N ^ 51)01)26))0 \ _ Z N ` a Z Nb c ./01)245/)*57
./01)28.7+ ./01)2)+()0.4)1*+ ./01)29(04,3: 51)01)2,1)58541( 51)01)28.7+ 51)23.+;+* de < f g
D ./) ./01)2()50 35.E
eD 1v©2e
® v Ê Ë < Y 0)6*+,E24,/4+7 0)6*+,E2) ).E v Ì Í U ± 2 i Î 4,-2)6*+,E ± 2 º i v « ¾ ' ± 2 / Ï r±2¶Ð½r¿2 ÑÒ®¿2'KÓ¢£ U±2ÊË Ô Ã Õ Ö× H i Î ± 2 ).E [ ,i α 2'±2 F[
78%&'),&9 GD, +>- ,-*D?,H- IA/A+ DJ /?I+A/-KA. K.+. L,DH-**AEF AE -/M-KK-K K-NAH- .E DL-E *D?,H- NAK-D *-,N-, *DJ+O.,%&'(*+,-./-, +D A/LI-/-E+ +>- L,DH-**AEF .EK *+D,.F- DJ /?I+A/-KA. K.+. A* ?*-KP 2>- *D?,H- HDK- A* /DKAJA-K .EK . E-O LI?F)AE AE +>A* *DJ+O.,- +D -E>.EH- A+* J?EH+ADE A* .KK-K M.*-K DE +>- J-.+?,-* .EK .,H>A+-H+?,- DJ +>A* *DJ+O.,-P 2,.E*LI.E+ A+ +D +>- -/M-KK-K *@*+-/* .J+-, H,D**HD/LAI- +D A/LI-/-E+ . NAK-D *?,N-AII.EH- *@*+-/ M.*-K DE 0,/1 O>AH> .I*D H.E HDE+,DI . J,DE+-EK -Q?AL/-E+P 2>- -RL-,A/-E+.I ,-*?I+ *>DO* +>.+ +>A* /-+>DK H.E -E>.EH- +>- J?EH+ADE DJ NAK-D K.+. L,DH-**AEF .EK +>- NAK-D H.E M- LI.@-K JI?-E+I@ AE HIA-E+ M,DO*-,P :(; <3'/%9 %&'(*+,-./-, DL-E *D?,H- NAK-D *-,N-, LI?FAE -/M-KK-K .LLIAH.+ADE
I ./) ./01)24-E ./) ./24-E2)K0+ 4-E ./) 3,71+
® v ' U , % & [ $ Ø Ù j k l Ú l ' Û Ü d $ Ý Þ ß ^ à $á â ã &'Û Ü ./24-E2)K0+ ¬­ 7 $\ ] Z N ¿ ! Û Ü ' ä å æ ç è $ Ú l ' Û Ü ä å æ ç ^ v é ê ] ë v v ¿ ! ì H í î $ Ú l ' Û Üï
*+,-./-, Y Z < = > ? @ E A B [ D \ ] ^ _ W X E ` a b > c d e f g h i %&'()*+,-./-, E G j k l m n
Eo p qr s t uv w W XE o p xy n z {| } ~ 4 56 c s O I 7 E ] ^
789: '¤¥¦§,¨+,©ªn«¬ "S6!"##3! ;<=> ­"# "1S1 ® ' ( ¯°± ²³ ´ 4 56 c
"57
!"# $
%&'()*+,- ?%&'()*+,-+* ./0123
1/(.9/+E 46,* C8*,-+J188+* ./) .(()*+,-./9 ./) 9*,J-+)65E ./) ;.E)6 ./) 6+.96) ./) 80( ./) 85*-,)F/ ./) 85*-,)R1) ./) 8*,-+(.S+F/ ./) (.9/,7L1.) ./) )5997+T3. ./) 9+)&.4)
e<
O.9> <
?@&'()*+,-+* 'ZN÷ \6+ 0719./ (K()+- 58 ?%&'()*+,-+*
./) *,;O*,-+U,0)1*+ VC *,; 8*,-+ 4,0)1*+ CV 1/(.9/+E ./) 8.7+U51/)+* VC *,; 8*,-+ ()*+,- 4,0)1*+ CV 1/(.9/+E ./) *8(O*,-+(W*.))+/ 1/(.9/+E ./) *8(MK)+(W*.))+/ VC *,; ()*+,- 4,0)1*+ CV OFXP C4,0)1*+O.7+ 1/(.9/+E ./) 8*,-+(W*.))+/ 1/(.9/+E ./) JK)+(W*.))+/ ./) 8*,-+451/) ./) *+45*E(),*) ./) *+45*E).-+ Y < ./) ./01)2*1/ 35.E
相关文档
最新文档