本文包含确前置准备确认、内核驱动移植、mjpeg-streamer
移植、移植中遇到的错误和可能遇到的错误、以及解决方案、配置网页显示等内容。
MJPG
MJPG 是 MJPEG 的缩写,但是 MJPEG 还可以表示文件格式扩展名,全名为 **”Motion Joint Photographic Experts Group”**,是一种视频编码格式。
Motion JPEG 技术常用与闭合电路的电视摄像机的模拟视频信号“翻译”成视频流,并存储在硬盘上。
环境
- 主机:Ubuntu 18.04.4 LTS
- 目标机:Cortex-A7
- 交叉工具链:arm-linux-gnueabihf-
- 摄像头:OV5640
查看摄像头信息
- 支持 UVC (免驱)
- YUV 或者 MJPRG 格式输出
驱动移植
- 进入内核配置菜单,
make menuconfig
- 选择
Device Drivers
->Multimedia support
->Video capture adapters
->V4l USB devices
&V4L platform devices
Device Drivers
->Multimedia support
->V4L platform devices
->Support for timberdale Video In/LogiWIN
&SoC camera support
&platform camera support
Device Drivers
->Multimedia support
->Video capture adapters
->V4l USB devices
->USB Video class (UVC)
&UVC input events device support
&GSPCA based webcams
Device Drivers
->Multimedia support
->Video capture adapters
->V4l USB devices
->GSPCA based webcams
->ZC3XX USB Camera Driver
- 编译内核,
make -j4 uImage
并拷贝到共享目录
mjpeg-streamer 移植
mjpg-stream的移植需要jpeg的库,所以需要先移植jpeg的库
jpeg 库移植
- 下载 jpeg 库
http://www.ijg.org/files/jpegsrc.v8b.tar.gz
- 解压
tar -xvf jpegsrc.v8b.tar.gz
- 配置源码
1
2
3cd jpeg-8b
mkdir rootfs/video/jpegarm -p
./configure --prefix=`home/rootfs/video/jpegarm --host=arm-linux-gnueabighf - 编译安装
1
2make
make install - 拷贝库到网络文件系统中
1
sudo cp -arf /home/rootfs/video/jpegarm/lib/* /home/rootfs/lib
mjpg-streamer 移植
- 下载 mjpg-streamer
https://sourceforge.net/projects/mjpg-streamer/
- 解压
1
2tar -xvf mjpg-streamer-r182.tar.gz
cd mjpg-streamer-182 - 修改源码
1
2
3
4
5
6
7
8cd mjpg-streamer
vim ./plugins/input_uvc/Makefile
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
修改为
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /home/ming/rootfs/video/jpegarm/include
$(CC) $(CFLAGS) -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS)
修改为
$(CC) $(CFLAGS) -L /home/ming/rootfs/video/jpegarm/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS) - 编译
1
2cd mjpg-streamer-182/mjpg-streamer
make CC=arm-linux-gnueabihf-gcc - 在网络文件系统中创建文件夹并拷贝文件
1
2
3
4mkdir -p /home/rootfs/mjpg-streamer
sudo cp *.so /home/ming/rootfs/mjpg-streamer -arf
sudo cp mjpg_streamer /home/ming/rootfs/mjpg-streamer -arf
sudo cp start.sh www/ /home/ming/rootfs/mjpg-streamer/ -arf - 修改
start.sh
文件1
./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so -w ./www"
http://开发板IP地址:8080/?action=stream
查看视频流http://开发板IP地址:8080/?action=snapshot
查看快照- 修改网页源码
错误
1. make: svnversion: Command not found
电脑中缺少必要的库,需要安装必要的软件集
1 | sudo apt-get install subversion libv4l-dev libjpeg62-dev imagemagick |
2. mjpg_streamer.c:27:28: fatal error: linux/videodev.h: No such file or directory
可能是因为内核2.6.38和以后的版本已经移除了对 v4l1 的支持,这个东西可能比较老旧了。新的头文件是 video4linux2.h;相比v4l1很多接口都变化 。
可以选择以前低版本内核,或者用新版本的mjpg-streamer-code-182
3. Init v4L2 failed !! exit fatal \n init_VideoIn failed
可能是由于摄像头支持YUV,而不是JPEG格式,需要修改start.sh文件
1 | ./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so -w ./www" |
4. 获得帮助
1 | ./mjpg_streamer -h |