四、mjpeg-streamer 视频流服务器测试
1、jpeg 库的移植
这里可以参考我前面的博客 荔枝派Zero(全志V3S)驱动开发之RGB LCD屏幕显示jpg图片,只看第一步即可,这里面有讲述到具体的步骤,就不再重复描述了。
在指定的目录下会生成包括 bin、include、lib、share,标红的这两个文件夹是 mjpg_streamer 需要的。
2、移植 mjpeg-streamer
①、前置软件
sudo apt-get update sudo apt-get install g++ libjpeg8-dev imagemagick libv4l-dev cmake git
②、下载 mjpg-streamer 源码
<1>、点击此处:MJPG-streamer
<2>、点击 Code,如下图所示:
<3>、进去后,点右上的 “Download Snapshot” 下载最新版的 mjpg-streamer-code-182,因为旧版编译时会出现缺少一个头文件的错误
目录 mjpg-streamer-code-182 里内容如下:
doc/ 、mjpg-streamer/、udp_client/、mjpeg-client/、mjpg-streamer-experimental/、uvc-streamer/
- mjpg-streamer:目录下提供了的执行程序和各个输入输出设备组件,支持输入有 control、file、gspcav(早期摄像头)、testpicture、uvc(现在主流摄像头),正式发布的版本。我们采用这个版本。
- mjpg-streamer-experimental:目录下提供实验性版本的组件,支持输入有 control、file、http、ptp2、testpicture、uvc(现在主流摄像头)。对 yuv 的摄像头兼容性不行。若要兼容 yuv 摄像头,需要需改较多的地方。
- uvc-streamer:目录下提供了 uvc-streamer 的可执行目录。
- udp_client:udp 输出的客户端。
- mjpeg-client:分别有 linux 和 windows 的客户端。
③、修改 mjpg-streamer 源码
cd mjpg-streamer-code-r182/mjpg-streamer vim ./plugins/input_uvc/Makefile
14#CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC 15 CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /home/Gnep/licheepi_zero/tools/include
34#$(CC) $(CFLAGS) -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS) 35 $(CC) $(CFLAGS) -L /home/Gnep/licheepi_zero/tools/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS)
④、编译 mjpg-streamer 源码
make CC=arm-linux-gnueabihf-gcc
编译生成 *.so 文件和可执行文件 mjpg_streamer
3、搬移文件到 nfs 目录
将前面编译生成文件,还有 start.sh 、/www/ 搬移到 nfs 根目录中
sudo mount -t nfs 192.168.25.25:/nfsroot /mnt -o nolock # 挂载 nfs sudo mkdir /mnt/mjpg-streamer sudo cp -rf *.so /mnt/mjpg-streamer/ sudo cp -rf mjpg_streamer /mnt/mjpg-streamer/ sudo cp -rf start.sh www/ /mnt/mjpg-streamer/ sudo mkdir /mnt/mjpg-streamer/lib sudo cp -rf ../../tools/lib/* /mnt/mjpg-streamer/lib/
挂载 nfs 效果:
把前面编译生成文件,还有 start.sh ./www/ 搬移到 nfs 根目录中
此时 nfs 中 mjpg-streamer 目录下存在这些文件:
4、开发板测试
①、挂载 nfs
mount -t nfs 192.168.25.25:/nfsroot /mnt -o nolock
②、把 nfs 目录下的 mjpg-streamer/ 拷贝到当前目录(/root 目录下)
cp -rf /mnt/mjpg-streamer/ ./ ls
③、设置环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/mjpg-streamer/lib
④、开启 web 服务器
./mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 320x240 -f 30 -yuv" -o "out put_http.so -w /root/mjpg-streamer/www"
注:
-i 输入协议选择,这里是 uvc 摄像头
-o 输出选择,这里是输出为 http 协议
-f 帧率的设置,这里是1秒30帧
-d 输入设备的选择,这里是摄像头0
-w 这里是 web
-y 表示输入格式为 YUV,如果不加 -y 表示 mjpg 输入
-r 表示图片尺寸640x480
input_uvc.so:UVC输入组件
output_http.so:网页输出组件
⑤、浏览器地址栏输入 单板ip:端口号 可以看到摄像头捕捉的图片
192.168.25.20:8080
上面的页面是刷新一次网页才会更新一次,我们可以在网页地址栏输入http://192.168.25.20:8080/?action=stream 这样就可以实时更新显示视频了