i.MX6ULL - 远程视频监控方案实现(nginx-rtmp流媒体服务器、ffmpeg推流)

i.MX6ULL - 远程视频监控配置(nginx-rtmp流媒体服务器、ffmpeg推流)



1、前言

         ~~~~~~~~         该远程视频监控实现主要是参考了正点原子和韦东山老师的教程,再加上我自己的偷懒融合而成。(<_>:其实是我自己的目的是为了快速实现,用以验证方案,后续有一个项目需要用到。。。)

         ~~~~~~~~         正点原子的视频监控项目是手动移植ffmpeg、nginx、alsa-utils(处理音频的软件)到开发板上,我自己尝试移植了一下,虽移植成功,但步骤比较繁琐且不一定会遇到什么问题要去解决,所以也没法写一个固定步骤的文档教程。

         ~~~~~~~~         后来看到韦东山老师的教程,发现用buildroot构建文件系统的时候,buildroot的工具包内ffmpeg和nginx都包含了,那么索性直接用buildroot文件系统就得了,不需要自己手动移植了。


2、buildroot文件系统构建

基本构建:参考正点原子《I.MX6U嵌入式linux驱动开发指南》Buildroot根文件系统构建这一章节,当然,我自己也手把手做了一遍并写了一个博客,见此:https://blog.csdn.net/qq153471503/article/details/127017247

基于此基本文件系统,我们开始添加ffmpeg、nginx、alsa-utils的编译。

2.1 勾选alsa-utils(选做:如果你需要推音频就勾选上)

Target packages > Audio and video applications > alsa-utils

全部勾选。

如下图所示:

扫描二维码关注公众号,回复: 15265326 查看本文章

Target packages > Libraries > Audio/Sound > alsa-lib

全部勾选,如下图:

2.2 勾选ffmpeg

Target packages > Audio and video applications > ffmpeg

全部勾选,如下图所示:

2.3 勾选mjpg-streamer(选做)

Target packages > Networking applications

勾选: mjpg-streamer

如下图所示:

2.4 勾选nginx

Target packages > Networking applications > nginx

全部勾选,如下图所示:

由于nginx本身是没有rtmp功能的,是依靠第三方模块支持的,所以需要将模块一同编译进nginx。

additional modules就是用于指定第三方模块的目录。

填上:/opt/yijie/buildroot-2022.02.5/dl/nginx/nginx-http-flv-module

这是我下载的nginx-http-flv-module。

建议是放到buildroot-2022.02.5/dl/nginx/目录下,如果没有nginx目录则创建。

可以在buildroot-2022.02.5/dl/nginx/目录下使用git直接下载:

git clone https://github.com/winshining/nginx-http-flv-module.git

说明:nginx-http-flv-module是基于nginx-rtmp-module的二次开发,比nginx-rtmp-module支持的功能更多了,详细介绍可见:https://github.com/winshining/nginx-http-flv-module


3、编译测试

以上配置完之后就可以编译了,启动测试见:https://blog.csdn.net/qq153471503/article/details/127017247

启动后,开发板打印:

可以看到自动打印 start nginx,默认开机启动。

修改buildroot文件系统中nginx默认配置文件:/etc/nginx/nginx.conf

在该文件末尾加入:

rtmp {
    
    
    server {
    
    
        listen 1935;
        chunk_size 4096;#上传flv文件块儿的大小
        application live {
    
    
             live on;#开启live的应用
             allow publish 127.0.0.1;
             allow play all;
        }
    }
}

保存退出后,重启nginx:

/etc/init.d/S50nginx restart

此时,推流的地址就是:rtmp://127.0.0.1:1935/live/xxxxx

其中,xxxxx可以自定义。

使用ffmpeg推流测试:

推流命令行:

ffmpeg -f v4l2 -video_size 320x240 -framerate 15 -i /dev/video1 -q 15 -f flv rtmp://127.0.0.1/live/stream

成功推流。

在windows上使用vlc播放器拉流查看视频:

成功拉流播放:


4、后记

本编文章快速验证了方案可行性,后续的视频监控项目即可以此来做。

imx6ull的性能太拉胯了,使用uvc的usb摄像头需要经过转码,所以vlc播放器拉流播放会异常的卡!

后续打算使用全志的SOC来做此方案。


ends…

猜你喜欢

转载自blog.csdn.net/qq153471503/article/details/130756324