您的位置:首页 > 理论基础 > 计算机网络

基于mjpg-streamer网络视频服务器移植

2012-05-06 15:17 274 查看
MJPG简介:

  MJPG是MJPEG的缩写,但是MJPEG还可以表示文件格式扩展名.

  MJPEG

  全名为 "Motion Joint Photographic Experts Group",是一种视频编码格式,

  Motion JPEG技术常用与闭合电路的电视摄像机的模拟视频信号“翻译”成视频流,并存储在硬盘上。典型的应用如数字视频记录器等。MJPEG不像MPEG,不使用帧间编码,因此用一个非线性编辑器就很容易编辑。MJPEG的压缩算法与MPEG一脉相承,功能很强大,能发送高质图片,生成完全动画视频等。但相应地,MJPEG对带宽的要求也很高,相当于T-1,MJPEG信息是存储在数字媒体中的庞然大物,需要大量的存储空间以满足如今多数用户的需求。因此从另一个角度说,在某些条件下,MJPEG也许是效率最低的编码/解码器之一。

  MJPEG 是 24-bit 的 "true-color" 影像标准,MJPEG 的工作是将 RGB 格式的影像转换成 YCrCB 格式,目的是为了减少档案大小,一般约可减少 1/3 ~ 1/2 左右。

  MJPEG与MJPG的区别:

  1、mjpeg是视频,就是由系列jpg图片组成的视频。

  2、MJPG是MJPEG的缩写,但是MJPEG还可以表示文件格式扩展名.

一、环境

主机环境:ubuntu 10.04.4 LTS

目标机:YLE2410(S3C2410)

主机工具链:gcc-4.3.2

交叉工具链:arm-none-linux-gnueabi-gcc-4.3.2

摄像头:ZC301

二、移植过程

1、配置内核是内核支持芯片为ZC301的摄像头

Make menuconfig

Device 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的资料大家可以在下面这个网址查看:http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_Page

source code的网址是:http://mjpg-streamer.svn.sourceforge.net/viewvc/mjpg-streamer/

mjpg-stream的移植需要jpeg的库,所以我们先移植jpeg的库

(1)jpeg库的移植

1)jpeg源码包通过下面这个网址下载
http://www.ijg.org/files/jpegsrc.v8b.tar.gz
2)解压源码包

tar xvf jpegsrc.v8b.tar.gz

3)配置源码

cd jpeg-8b

./configure --prefix=/home/linux/s3c2410-2.6.35/video/jpeg --host=arm-none-linux-gnueabi

4)编译

make

5)安装

make install

6)拷贝库到文件系统中

cp //home/linux/s3c2410-2.6.35/video/jpeg /lib/libjpeg.so.8 /source/rootfs/lib

(2)mjpg-stream的移植

1)mjpg-stream源码包通过下面这个网址下载
http://sourceforge.net/projects/mjpg-streamer/
2)解压源码

tar xvf mjpg-streamer-r63.tar.gz

3)修改源码

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.lo

jpeg_utils.c:27: fatal error: jpeglib.h: No such file or directory

4)编译

make

5)测试

mkdir /source/rootfs/mjpg

cp *.so /source/rootfs/mjpg

cp 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=snapshot
6)在mjpg源码下有一个www的目录,这个一个网络使用mjpg的实例,结合web服务器(boa)可以实现一些其他相关功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: