视频服务器移植
原因是上述是对摄像头的动态控制 (用于控制视频设备的各种参数,如亮度、对比度、饱和度等。2 再次修改 plugins/input_uvc/Makefile(将刚才编译的mjpeg用上)snapshot 表示每次抓拍一张图形显示在网页上,stream 表示视频流也就是连续的图像。3 文件在第 14 行附加编译时需要的 mjpeg 头文件的路径。4 在第 33 行添加编译时需要的 mjpeg 库的路径
视频服务器移植
1.下载 jpeg 库,两个版本都可以
源码: http://www.ijg.org/files/jpegsrc.v8b.tar.gz v8 版本
源码: http://www.ijg.org/files/jpegsrc.v9f.tar.gz v9 版本
2. 配置 jpeg 源码,本教程以v9版本为例
tar -xvf [jpegsrc.v9f.tar.gz](http://www.ijg.org/files/jpegsrc.v9f.tar.gz)
cd jpeg-9f
./configure --prefix=/home/jeremy/video_stream/mjpeg/mjpeg \
--host=arm-none-linux-gnueabihf \
--build=aarch64-unknown-linux-gnu
`--prefix`:用来指定编译后软件的安装路径;
`--host`:用来指定编译时使用的工具链;
`--build`:这个选项用来指定编译软件的机器类型。
这两个参数 可以根据自己的实际情况来修改。
这里./configure是为了生成Makefile的
-
配置成功显示如下:
-
编译
make -j8
编译成功显示如下:
安装
make install
安装成功显示如下:
查看安装路径
将编译好的库文件拷贝到根文件系统中:
cd /home/jeremy/video_stream/mjpeg/mjpeg/lib
cp * ~/rootfs/lib/ -rf
3. mjpeg-streamer移植
-
下载 mjpg-streamer 源码:
mjpg-streamer-code-r182-mjpg-streamer -
将上述的源代码拿到ubuntu上并解压
unzip mjpg-streamer-code-r182-mjpg-streamer.zip
文件夹名字太长改一下
mv mjpg-streamer-code-r182-mjpg-streamer mjpg-streamer
查看文件夹
cd mjpg-streamer
1 编译器修改Makefile中的编译器
修改顶层目录及 中的 Makefile 文件:
修改
CC = gcc
为:
CC = arm-none-linux-gnueabihf-gcc
2 再次修改 plugins/input_uvc/Makefile(将刚才编译的mjpeg用上)
3 文件在第 14 行附加编译时需要的 mjpeg 头文件的路径
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
改为:
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC \
-I /home/jeremy/video_stream/mjpeg/mjpeg/include/
4 在第 33 行添加编译时需要的 mjpeg 库的路径
修改$(CC) $(CFLAGS) -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS)
为:$(CC) $(CFLAGS) -L /home/jeremy/video_stream/mjpeg/mjpeg/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS)
5 修改代码
将如下文件中initDynCtrls注释掉plugins/input_uvc/input_uvc.c
将如下文件中initDynCtrls注释掉plugins/input_control/input_uvc.c
原因是上述是对摄像头的动态控制 (用于控制视频设备的各种参数,如亮度、对比度、饱和度等。), 但是OV5640摄像头部分动态控制不支持,所以直接注释掉即可。
- 编译代码(顶层目录)
make clean
make
出现以下错误:
原因:
这个错误是由于 struct statx
和 struct statx_timestamp
在 utils.c
文件中被重复定义了。可能是因为在 utils.c
中同时包含了 <sys/stat.h>
和 <linux/stat.h>
,这两个头文件都定义了这些结构。
解决方法:
只包含 <sys/stat.h>
,不包含 <linux/stat.h>
。
打开源码根目录下utils.c文件注释掉*#include <linux/stat.h>
*
继续编译:make -j8
出现以下错误:
错误原因:
搜一下`cams`,仔细观察发现`/home/jeremy/video_stream/mjpg-streamer/plugins/input_uvc/input_uvc.c` ,`/home/jeremy/video_stream/mjpg-streamer/plugins/input_uvc/v4l2uvc.h` 文件中有cams的定义:
这个定义在头文件中创建了一个全局数组 `cams`,数组的类型是 `context`,大小是 `MAX_INPUT_PLUGINS`。这可能是导致在编译时遇到 "multiple definition of `cams`" 错误的原因。
在头文件中定义全局变量是一种常见的错误。当头文件被多个源文件包含时,每个源文件都会得到一个全局变量的副本,这在链接时会导致多重定义错误。
解决方法:
在头文件中只声明全局变量,而在一个源文件中定义它。在 `v4l2uvc.h` 中声明 `cams`:
*// v4l2uvc.h
extern context cams[MAX_INPUT_PLUGINS];*
然后在 v4l2uvc.c
中定义 cams
:
*// v4l2uvc.c
context cams[MAX_INPUT_PLUGINS];*
继续编译:make -j8
编译成功如下:
- 拷贝程序及库到根文件系统中
mkdir ~/rootfs/mjpeg
cp *.so ~/rootfs/mjpeg
cp mjpg_streamer ~/rootfs/bin
-
启动开发板测试mjpg_streamer, IP地址填写开发板的IP
mjpg_streamer -i “/mjpeg/input_uvc.so -y -d /dev/video0” -o “/mjpeg/output_http.so -w 192.168.2.10:8080” -
打开网页输入网址查看摄像头采集到的图形:
浏览器上地址栏输入如下内容:http: 192.168.2.10:8080/?action=snapshot
或者http: 192.168.2.10:8080/?action=stream
snapshot 表示每次抓拍一张图形显示在网页上,stream 表示视频流也就是连续的图像
现象如下:

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)