ARM Linux下FFmpeg+Nginx+RTMP 视频监控

news/2025/2/23 6:03:15

一、流媒体协议

RTSP(Real-Time Stream Protocol)由 Real Networks 和 Netscape 共同提出的,基于文本的多媒体播放 控制协议。RTSP 定义流格式,流数据经由 RTP 传输;RTSP 实时效果非常好,适合视频聊天,视频监控等 方向。

RTMP(Real Time Message Protocol)由 Adobe 公司提出,用来解决多媒体数据传输流的多路复用 (Multiplexing)和分包(packetizing)的问题,优势在于低延迟,稳定性高,支持所有摄像头格式,浏览器 加载 flash 插件就可以直接播放。

RTSP 和 RTMP 的区别: RTSP 虽然实时性最好,但是实现复杂,适合视频聊天和视频监控;RTMP 强在浏览器支持好,加载 flash 插件后就能直接播放,所以非常火,相反在浏览器里播放 RTSP 就很困难了。

后期还需要系统的学习音视频开发,兼顾Linux 嵌入式和音视频开发,走AI安防的方向

要想实现 RTMP 视频监控,必须要有这三部分:推流客户端、拉流客户端以及流媒体服务器。

推流端,我们可以使用 FFmpeg 来实现;

拉流端,我们可以用 VLC 播放器;

流媒体客户端,选择使用 Nginx 来搭建。

二、Nginx 移植

移植第三方资源,依然是需要拿到源码,交叉编译后,拷贝到开发板上。

1. 下载 Nginx 源码

wget http://nginx.org/download/nginx-1.20.0.tar.gz

2. 下载 nginx-rtmp-module 模块

原生的 Nginx 并不支持 RTMP,我们需要安装第三方模块 nginx-rtmp-module 插件使其支持 RTMP。

git clone https://github.com/arut/nginx-rtmp-module.git 

3. 交叉编译源码

tar -xzf nginx-1.20.0.tar.gz 

3.1 配置源码

注释源码中的 auto/cc/name的exit1

 修改 auto/types/sizeof 

执行以下命令,进行配置。可能会有格式问题,最好一行一行敲

./configure --prefix=/home/prover/linux/nginx-1.20.0/install \
--with-http_ssl_module \ 
--with-http_mp4_module \ 
--with-http_v2_module \ 
--without-http_upstream_zone_module \ 
--add-module=/home/prover/linux/nginx-rtmp-module 

配置成功如下:

3.2 编译

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi 
make

如果不出意料的话,就要出意外了。

 在 ./configure 在加一行命令参数

--with-cc-opt="-Wno-error" 

 如果出现下面错误:

修改 nginx 源码目录下的 objs/ngx_auto_config.h 文件 ,添加以下内容:

#ifndef NGX_HAVE_SYSVSHM 
#define NGX_HAVE_SYSVSHM 1 
#endif

编译成功:

3.3 安装

 make install

安装后,有4个文件,

sbin 目录下有一个可执行程序 nginx,用来运行服务器的。

这个可执行文件是一个“not stripped”文件,说明该文件包含了很多的调试信息,所以导致该文件特别 大 7.5MB,可以执行下面这条命令去掉调试信息、减少文件的大小:

arm-poky-linux-gnueabi-strip --strip-debug nginx

把可执行文件 nginx 拷贝到开发板上随意位置

将 conf、html、logs 文件拷贝到 /etc/nginx

3.4 测试

./nginx -V # 查看版本信息

启动:

./nginx -p /etc/nginx 

 查看后台

ps -aux

然后打开浏览器,输入开发板的IP地址。

4. 配置 nginx

后续我们会使用 FFmpeg 进行推流,将视频流通过 RTMP 推给 nginx 流媒体服务器,在此之前,我们需 要对 nginx 进行配置,打开 nginx 的配置文件/etc/nginx/conf/nginx.conf

rtmp {
        server {
                listen 1935; # ▒.▒听 1935 端口
                chunk_size 4096;

                application live{
                        allow publish 127.0.0.1;
                        allow play all;
                        live on; # 打开▒.▒播 .1;
                        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 推流

1. 视频推流测试

./nginx -p /etc/nginx

自己准备个视频,然后推流 

ffmpeg -re -i testVideo.mkv -c:av copy -f flv rtmp://127.0.0.1/live/mytest

点击 VLC 的媒体-》打开网络串流。然后输入自己开发板的IP和路径。

2. 摄像头视频测试

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

我的摄像头配置的有问题,后面回头要看看。


http://www.niftyadmin.cn/n/5863066.html

相关文章

vue中将el-table导出为excel文件

在 Vue Element UI 中,el-table 数据导出 Excel 文件,可以使用 xlsx(SheetJS)库进行处理。以下是详细的实现方法,包括安装依赖、代码示例和优化建议。 1. 安装依赖 首先,安装 xlsx 库: 复制…

宝塔扩容——阿里云如何操作

一、创建快照 磁盘快照,将数据备份,防止丢失。 1.登录“阿里云”账号 2.点击“控制台”——“云服务器 ECS” 3.点击“基本信息”下,右下角“系统盘” 4.点击“创建快照” 二、磁盘扩容 1.点击“云盘扩容” 2. 选择自己要扩容的大小 …

代码笔记插件

idea代码笔记插件 AnNote是一款代码笔记插件,支持多种语言,支持代码高亮,支持代码自动补全,支持搜索、支持附件,支持markdown格式文件 AnNote - IntelliJ IDEs Plugin | Marketplace 75折折扣: MGRYF-TJ…

在WPS中设置word的页码不从第一页开始,从指定页开始插入页码

大家好,我是小鱼。 在日常的办公中为Word文档页面插入页码是经常要做的。如果一个文档有几十页,插入页码不仅可以快速定位到文章的内容,如果需要制作目录也方便制作。正确情况下插入页码都是从第一页开始的,但是有些文档比如说标…

CPU、SOC、MPU、MCU--详细分析四者的区别

一、CPU 与SOC的区别 1.CPU 对于电脑,我们经常提到,处理器,内存,显卡,硬盘四大部分可以组成一个基本的电脑。其中的处理器——Central Processing Unit(中央处理器)。CPU是一台计算机的运算核…

算法与数据结构(环形链表II)

题目 思路 这个题其实与之前环形链表的题差不多,这个麻烦的一点是需要你返回入环的第一个节点。 若我们继续用哈希表还是很简单,就是继续遍历链表,遇到的第一个重复的值即为入环的第一个节点。 这里我们看一下快慢指针的方法。 这里我们假…

ctfshow——源码压缩包泄露

题目提示:解压源码到当前目录,测试正常,收工 题目如下图所示: 根据提示,我们需要找到解压包来帮助我们找到flag。但是我们并不确定解压包的名字是什么。 这时候可以通过dirsearch -u URL 来进行扫描 例如 dirsearch…

AGI觉醒假说的科学反驳:从数学根基到现实约束的深度解析

文章目录 引言:AGI觉醒论的核心迷思一、信息论视角:意识产生的熵约束1.1 香农熵的物理极限1.2 量子退相干的时间屏障二、数学根基:形式系统的自指困境2.1 哥德尔不完备定理的现代诠释三、概念解构:AGI觉醒假说的认知陷阱3.1 术语混淆的迷雾3.2 拟人化谬误的认知根源四、意识…