您的位置:首页 > 其它

mjpg-streamer视频服务器移植

2015-11-18 14:55 393 查看
相关软件下载地址:http://pan.baidu.com/s/16yo8Y

JPEG库的移植

对于内核linux-2.6.35,不能再使用servfox,如果要使用的需要修改大量的代码。在此选用新的方法来移植,需要两个文件jpeg,mjpg-stream.移植如下:

jpeg源码包通过下面这个网址下载

http://www.ijg.org/files/jpegsrc.v8b.tar.gz

1) 解压源码包

tar xvf jpegsrc.v8b.tar.gz

2) 配置源码

cd jpeg-8b

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

注:./configure 配置源代码树

安装目录:

--prefix=PREFIX

体系无关文件的顶级安装目录PREFIX(自己的主机用户目录下 /home/XXX),也就Apache的安装目录。[/usr/local/apache2]

系统类型:

--host=HOST

指定Apache HTTP服务器将要运行的目标系统类型HOST 。

[BUILD]

3)编译

make

4)安装

make install

5)拷贝库到文件系统中

cp
/home/linux/jpeg/lib/libjpeg.so.8
/source/rootfs/lib

(上面一句我改成了 cp libjpeg.so* ~/nfs_share/rootfs/lib/ -d )

④mjpg-stream的移植

1)下载源码

mjpg-stream源码包通过下面这个网址下载

http://sourceforge.net/projects/mjpg-streamer/

2)解压源码

tar xvf
mjpg-streamer-r63.tar.gz

mkdir /home/linux/mjpg-streamer-r63

3)修改源码

cd mjpg-streamer-r63

修改顶层makefile及plugins目录中的各级makefile,将所有

CC=gcc

修改为

CC=arm-cortex_a8-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/jpeg/include

修改

$(CC)
$(CFLAGS) -ljpeg -o $@ input_uvc.c
v4l2uvc.lo jpeg_utils.lo dynctrl.lo



$(CC) $(CFLAGS) -ljpeg -L/home/linux/jpeg/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

4)编译、移植

make

mkdir /source/rootfs/mjpg

cp *.so
/source/rootfs/mjpg

cp
mjpg_streamer /source/rootfs/bin

mjpg_streamer -i "/mjpg/input_uvc.so -y" -o "/mjpg/output_http.so -w 192.168.0.110:8080" & (注意:这里是板子的ip 192.168.1.236)

使用视频连接软件,进行连接,会看到摄像头采集到了清晰地景象!!!

浏览器上执行:

http://192.168.1.236:8080/?action=snapshot (每次回车单张抓拍)

或者

http://192.168.1.236:8080/?action=stream

⑤拍照功能的实现

由于mjpg_stream中output-file.so能实现连续拍照的功能,不能实现单拍或连拍几张的功能所以需要对output_file原码进行修改。

# cd mjpg-streamer-rc63/plugins/output_file

# vim output_file.c

在96行 函数 void *worker_thread(void *arg) 体中加入以下代码:

char buf[10]; //用于存放从管道读取的命令

int flags = 0; //拍照标志,1:表示11张照片,2:表示1张照片

int fd_com = 0; //打开管道的文件描述符

stop_num = 0; //拍照计数

if ( access(“/tmp/webcom”,F_OK) < 0 ) //创建有名管道用于接收拍照命令

{

if ( mkfifo(“/tmp/webcom”,0666 ) < 0)

{

Printf(“ photo fifo create failed\n”);

}

}

fd_com = open (“/tmp/webcom”,O_RDONLY,0666);

if (fd_com < 0)

{

perror (“open the file webcom error”);

}

在while( ok >= 0 && !pglobal->stop){ 后加入

if (flags == 0)

{

while(1)

{

read(fd_com,buf,sizeof(buf));

if (strncmp(buf,”danger”,6) == 0) //拍11张照片

{

flags = 1;

bzero(buf,sizeof(buf));

break;

}

if (strncmp(buf,”one”,3) == 0) //拍1张照片

{

flags = 2;

bzero(buf,sizeof(buf));

break;

}

}

}

在if (delay > 0){

usleep(1000*delay);

}后加入

stop_num++

if (flags == 1) //判断拍照的数量

{

if ( stop_num > 9)

{

stop_num = 0;

flags = 0;

}

}

else if (flags == 2)

{

stop_num = 0;

flags = 0;

}

测试

所以只要向有名管道/tmp/webcom写入danger就能连拍11张照片,写入one就拍一张照片。

#echo one > tmp/webcom

#ls /pice/可以看到图片信息

注:拍照功能实现:

mjpg_streamer -i "/mjpg/input_uvc.so -y" -o "/mjpg/output_http.so -w /www" -o "/mjpg/output_file.so -f /pice -d 15000" &
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: