视频服务器移植
创始人
2025-01-11 22:04:10
0

视频服务器移植

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的 
  1. 配置成功显示如下:
    在这里插入图片描述

  2. 编译
    make -j8

编译成功显示如下:
在这里插入图片描述

安装
make install

安装成功显示如下:
在这里插入图片描述

查看安装路径
在这里插入图片描述

将编译好的库文件拷贝到根文件系统中:

cd /home/jeremy/video_stream/mjpeg/mjpeg/lib cp * ~/rootfs/lib/ -rf 

在这里插入图片描述

3. mjpeg-streamer移植

  1. 下载 mjpg-streamer 源码:
    mjpg-streamer-code-r182-mjpg-streamer

  2. 将上述的源代码拿到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摄像头部分动态控制不支持,所以直接注释掉即可。

  1. 编译代码(顶层目录)
    make clean
    make

出现以下错误:
在这里插入图片描述

原因:

这个错误是由于 struct statxstruct statx_timestamputils.c 文件中被重复定义了。可能是因为在 utils.c 中同时包含了 ,这两个头文件都定义了这些结构。

解决方法:
只包含 ,不包含
打开源码根目录下utils.c文件注释掉*#include *

在这里插入图片描述

继续编译: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

编译成功如下:
在这里插入图片描述

  1. 拷贝程序及库到根文件系统中
mkdir ~/rootfs/mjpeg cp *.so ~/rootfs/mjpeg cp mjpg_streamer ~/rootfs/bin 
  1. 启动开发板测试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”

  2. 打开网页输入网址查看摄像头采集到的图形:
    浏览器上地址栏输入如下内容:
    http: 192.168.2.10:8080/?action=snapshot
    或者
    http: 192.168.2.10:8080/?action=stream
    snapshot 表示每次抓拍一张图形显示在网页上,stream 表示视频流也就是连续的图像
    现象如下:
    在这里插入图片描述

相关内容

热门资讯

正版辅助"aapok... aapoker透视脚本开挂教程视频分享装挂详细步骤在当今的网络游戏中,aapoker透视脚本作为一种...
辅助开挂!博雅红河西元红河修改... 辅助开挂!博雅红河西元红河修改器,poker红龙辅助(透视)开挂辅助工具(有挂方法);博雅红河西元红...
透视辅助!hardrock透视... 透视辅助!hardrock透视工具,pokemmo辅助工具,传授开挂辅助插件(透视有挂方略)hard...
透视安装“hhpoker开挂教... 透视安装“hhpoker开挂教程”开挂(透视)辅助安装(AI教程有挂秘笈);无需打开直接搜索加(薇:...
盘点开挂"wpk私人... 您好:这款wpk私人局辅助是真的吗游戏是可以开挂的,确实是有挂的,很多玩家在这款wpk私人局辅助是真...
开挂辅助!破解大菠萝的辅助器,... 开挂辅助!破解大菠萝的辅助器,wepoker游戏下载(透视)开挂辅助神器(有挂秘籍);破解大菠萝的辅...
透视辅助!德州局脚本,竞技联盟... 竞技联盟透视插件 无需打开直接搜索微信:136704302本司针对手游进行,选择我们的四大理由: 1...
实操分享“德州透视是真的吗”开... 是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微信(136704...
盘点辅助"wepok... 盘点辅助"wepoker破解版内购"wepoker免费脚本咨询(透视)开挂辅助插件(有挂解惑)《详细...
透视辅助!wpk控制牌是真的吗... 透视辅助!wpk控制牌是真的吗,wepoker国外版透视,实测开挂辅助工具(透视有挂规律);打开点击...