imx6ull: 从内核、buildroot配置实现ffmpeg+nginx+rtmp+USB摄像头

前言:

        根据正点原子的教程,在官方提供的出厂根文件系统下很容易就实现了  《I.MX6U 嵌入式 Linux C 应用编程指南》第三十四章的视频监控项目。但是想自己从内核、根文件系统自己配置来实现整个流程,以便于在其他平台下能够迁移,而且也算是熟悉buildroot的使用。     

环境:

        硬件平台:正点原子imx6ull

        linux kernel:linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek

        buildroot:2022.02.8

        ffmpeg:4.4.3

        nginx:v1.20.0

        nginx-rtmp-module

一、内核

        对于usb摄像头,需要开启v4l2以及usb摄像头的支持。

        在内核目录下,使用make menuconfig ,根据如下图片进行配置

 Device Drivers  --->
    <*> Multimedia support  --->
        [*]   Video capture adapters  --->
            [*]   V4L USB devices  --->
                <*>   USB Video Class (UVC)
                [*]     UVC input events device support

        配置完成后,开始编译make -j12

二、buildroot根文件系统

1、基本配置

        参考正点原子的《Buildroot 构建 Qt 根文件系统》,使用正点原子官方提供buildroot-2022.02.8.tar,解压后,开始使用menuconfig配置。下面部分基本参考正点原子的手册,但是不开启QT。

 

 2、配置ffmepg

         开启ffmpeg,使能全部功能,虽然会占用空间大点,防止后面缺东西。

 

 3、配置nginx

        虽然《I.MX6U 嵌入式 Linux C 应用编程指南》第三十四章的视频监控项目中配置的nginx是使用交叉编译的,但是我这里参考韦东山的视频教程(流媒体方案的实现之Nginx_哔哩哔哩_bilibili 7:00左右),使用buildroot进行nginx的配置,以及使用第三方的库nginx-rtmp-modules。

  • 步骤一:将nginx-rtmp-module文件夹放到<buildroot>/dl/nginx目录下。(也可也git clone GitHub - arut/nginx-rtmp-module: NGINX-based Media Streaming Server
  • 步骤二:建议删除之前编译生成的nginx,否则设置第三方模块会不生效。rm -rf <buildroot>/output/build/nginx-xxx
  • 步骤三:在menuconfig下配置nginx的addtional modules添加:$(TOPDIR)/dl/nginx/nginx-rtmp-module

  • 步骤四:编译 make -j12。生成的根文件系统目录为:<buildroot>/output/images

 4、问题汇总

  • 问题一:使用编译出来的根文件系统,nfs挂载,提示mount: you must be root

        参考连接:(3条消息) buildroot制作的嵌入式Linux系统启动后不是root用户_99自由客的博客-CSDN博客

        解决方案:我这里是将buildroot生成rootfs.tar解压到虚拟机中,然后使用nfs进行网络挂载。在根文件中,chmod a-s  bin/busybox即可。 

  • 问题二:每次启动都需要输入用户密码

        参考链接:我用buildroot产生的rootfs,每次启动都要登录,有什么办法可以去掉这个登录吗? / 全志 SOC / WhyCan Forum(哇酷开发者社区)

        解决方案:在buildroot配置时,已经设置了账户密码均为root。此时第一次登录进入系统后,去到/bin/inittab目录下,修改console:respawn为-/bin/sh。重启即可。

  • 问题三:menuconfig中配置添加ffmpeg,nginx的支持,出现无法下载所需的包

        解决方案:翻墙、等一会再操作!!!多试几次,网络不好就这样。

三、测试验证

         1、根据上面编译出来的内核与根文件系统,启动开发板。

        2、验证是否支持usb摄像头。将摄像头插入开发板,打印如下。并且ls /dev/video*可以看到新出现的video设备,即内核配置v4l2以及usb摄像头正常。

         3、测试ffmpeg。使用ffmpeg调用摄像头进行录像,测试是否正常。

ffmpeg -s 320x240 -i /dev/video2 ./test.avi 

                把视频传到虚拟机进行播放,能播放即正常

        4、测试nginx是否添加第三方库nginx-rtmp-modules。开发板命令行输入ffmpeg -V。看到红色划线部分即添加正常。

         5、配置nginx,这部分参考正点原子《I.MX6U 嵌入式 Linux C 应用编程指南》第三十四章的视频监控项目。

        打开 nginx 的配置文件/etc/nginx/nginx.conf添加如下内容:

rtmp {
    server {
        listen 1935; # 监听 1935 端口
        chunk_size 4096;
        application live{allow publish 127.0.0.1;
        allow play all;
        live on; # 打开直播
        record off; # 关闭 record
        meta copy;
    }
    application hls {
        live on;
        hls on;
        hls_path /tmp/hls;
        hls_fragment 8s;
        }
    } 
}
         接着执行如下命令重启 nginx :    ./nginx -p /etc/nginx -s reload

        使用ffmpeg采集摄像头视频数据,发送给nginx流媒体服务器(也是imx6ull),执行如下命令:

ffmpeg -f v4l2 -video_size 320x240 -framerate 15 -i /dev/video2 -q 10 -f flv rtmp://127.0.0.1/live/mytest

        此时开发板的ip地址为:192.168.124.5        

        pc上,使用vlc播放器拉流,播放如下地址:rtmp://192.168.124.5/live/mytest

 

 

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值