一、项目环境介绍:
1、Ubuntu 12.04 发行版
2、GCC 交叉编译工具链(版本 4.5.1)
3、U-boot-2010.03
4、FS4412 开发板(ARM Cortex-A9 内核)
5、FS_11C14 开发板(ARM Cortex-M0 内核)
二、本节目的:
1、了解 V4L2 采集图像流程
2、了解 mjpg-stream
3、掌握 mjpg-stream 移植
4、源文件下载地址:
三、V4L2 视频采集程序流程简介
video for linux
打开视频设备
设置视频设备属性及采集方式
视频数据处理
关闭视频设备
四、mjpg-stream 介绍:
Motion Joint Photographic Experts Group
mjpg-stream 是一个轻量级的视频服务器软件
用于把 mjpeg 格式的文件变成流媒体输出
用于从 webcam 摄像头采集图像,把它们以流的形式通过基于IP 的网络传输到浏览器如 Firefox,Cambozola,VLC播放器,Windows 的移动设备或者其他拥有浏览器的移动设备
mjpg-streamer 可以通过文件或者是 HTTP 方式访问linux UVC 兼容摄像头
mjpeg 是视频,就是由系列 jpg 图片组成的视频
mjpeg 是一个可以从单一输入组件获取图像并传输到多个输出组件的命令行应用程序,因此移植 mjpg-stream 的实质是增加一个命令
移植 mjpg-stream 前先要为内核配置 video 驱动和移植 jpeg 库
五、video 驱动配置:
1、安装 ncurses 库
sudo apt-get install libncurses5-dev
2、配置万能驱动 USB 摄像头
cd linux-3.0-fs4412_V3
make menuconfig
Device Drivers --->
<*> Multimedia support --->
<*> Video For Linux
Device Drivers --->
<*> Multimedia support --->
[ * ] Video capture adapters --->
[ * ] V4L USB devices --->
<*> USB Video Class (UVC)
[ * ] UVC input events device support
![](https://i-blog.csdnimg.cn/blog_migrate/08957846c0887fba0b0119375cdbd748.png)
![](https://i-blog.csdnimg.cn/blog_migrate/92d9a0aa4a69bf2201f6fcd4360ac54c.png)
3、重新编译内核并拷贝到 tftpboot
make zImage
cp ./arch/arm/boot/zImage /tftpboot
六、JPEG 库移植:
1、将源码 jpegsrc.v8b.tar.gz 复制到相应目录并解压
本项目文件均在: ~/Documents/WarehouseSystem
2、创建存放编译生成文件的目录
mkdir ~/Documents/WarehouseSystem/jpeg_arm
3、配置交叉编译和安装参数
cd jpeg-8p
./configure --host=arm-none-linux-gnueabi --prefix=/home/wf/Documents/WarehouseSystem/jpeg_arm
![](https://i-blog.csdnimg.cn/blog_migrate/a27910b93da5fdbe745099a81d963f2a.png)
4、交叉编译和安装
make clean; make; make install
![](https://i-blog.csdnimg.cn/blog_migrate/2085b5b543c20beb3582fbb07768ac6d.png)
5、将编译好的库文件拷贝到根文件系统中
cp ../jpeg_arm/lib/* /source/rootfs/lib
六、mjpg-streamer 移植:
1、将源码 mjpg-streamer-r63.tar.gz 复制到相应目录并解压
本项目文件均在: ~/Documents/WarehouseSystem
2、配置 mjpg-streamer:
cd mjpg-streamer-r63
修改所有 Makefile (包含顶层和所有子目录中的)
![](https://i-blog.csdnimg.cn/blog_migrate/0ddf36b5fa3a50d701483aab58ce87ef.png)
![](https://i-blog.csdnimg.cn/blog_migrate/49f119664ae8b1e23ba845d627c9b733.png)
修改 ./plugins/input_uvc/Makefile
![](https://i-blog.csdnimg.cn/blog_migrate/49f4fe8889523510762e546f38698c34.png)
![](https://i-blog.csdnimg.cn/blog_migrate/92e2e1de99d3f69534fab7aac652c704.png)
修改 ./plugins/input_uvc/v4l2uvc.c
![](https://i-blog.csdnimg.cn/blog_migrate/656e1bf694b77b547ec3f721aabaaa83.png)
![](https://i-blog.csdnimg.cn/blog_migrate/44890ade980da2a6c2682a2d18f074ba.png)
![](https://i-blog.csdnimg.cn/blog_migrate/abd769fc3de21338ccb61a2b75d75777.png)
![](https://i-blog.csdnimg.cn/blog_migrate/67d583ddd0b180049dd0663b9784418c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e6b66f8c48c9d636faf775c887fc3326.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9dd3d8ec886c2d0ffa601642b7f62ae4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dc186aa2233bac71547b167af5966713.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e62503369ebba516e73e5ba332abd70f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/14bfcdaf0ceb78e7a76c5940c541392e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f3f127c31a2d1db96a1032938843dc21.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4c3bc76126cf5e3d02cd7f6328b45dbc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c41682239a49e3bff3fe9ef00a30d097.png)
编译 mjpg-streamer
cd ~/Documents/WarehouseSystem/mjpg-streamer-r63
make clean; make
![](https://i-blog.csdnimg.cn/blog_migrate/b36ed1fbc987864a1977ad84db44d5c6.png)
3、拷贝程序和库文件到根文件系统:
mkdir /source/rootfs/mjpg
cp ./*.so /source/rootfs/mjpg/
cp ./mjpg_streamer /source/rootfs/bin/
4、测试 mjpg_streamer
打开开发板执行如下指令
cd ~/Documents/WarehouseSystem/mjpg-streamer-r63
make clean; make
mjpg_streamer -i "/mjpg/input_uvc.so -y -d /dev/video0" -o "/mjpg/output_http.so -w 192.168.1.5:8080"
![](https://i-blog.csdnimg.cn/blog_migrate/6c91bee30cdebcc8b48a6567296aeff5.png)
进入主机在输入如下命令出现如下界面则移植成功
firefox 192.168.1.5:8080/?action=snapshot
![](https://i-blog.csdnimg.cn/blog_migrate/4e6f18fc0b2d3d862d2bf77a1eddae30.png)
firefox 192.168.1.5:8080/?action=stream
![](https://i-blog.csdnimg.cn/blog_migrate/1c03b4a724407a452c0d1cf9985dbbe1.png)