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

一、流媒体协议

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; # 关闭 recordmeta 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.rhkb.cn/news/24258.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图扑 HT for Web 总线式拓扑图的可视化实现

在图形用户界面(GUI)设计中,自定义连线技术不仅提升了用户体验,还为复杂数据可视化开辟了新的可能性。该功能点允许用户灵活地在界面元素之间创建视觉连接,使流程图、思维导图和网络拓扑图等信息呈现更加直观和动态。 …

大语言模型中的梯度值:深入理解与应用

1. 摘要 ​ 梯度是微积分中的一个基本概念,在机器学习和深度学习中扮演着至关重要的角色。特别是在大语言模型(LLM)的训练过程中,梯度指导着模型参数的优化方向。 本报告首先由浅入深地介绍梯度的概念,包括其数学定义…

Linux的用户管理

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统 root用户可以创建多个普通用户 一、添加用户 基本语法:useradd 用户名 当创建用户成…

C++第十七讲:map和set封装

C第十七讲:map和set封装 1.源码发现不同2.Mymap && Myset2.1红黑树的源码更改2.2迭代器的实现2.2.1源码的迭代器区别2.2.2const iterator的实现 2.3insert的实现2.4operator[]的理解 这一讲比较困难,我们首先会通过看map和set底层的源码&#xf…

Day9 25/2/22 SAT

【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p4&v…

OpenCV的形态学操作

在计算机视觉中,形态学操作是一种基于集合论的图像处理技术,主要用于分析和处理图像的形状特征。OpenCV 提供了 cv2.morphologyEx() 函数,用于执行多种高级形态学操作。 kernel np.ones((15, 15), np.uint8) 1. 开运算(Opening&…

【Python爬虫(50)】从0到1:打造分布式爬虫项目全攻略

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

KylinSP3 | 防火墙和麒麟安全增强设置KySec

一、系统防火墙原理 麒麟操作系统从V10版本开始,默认使用了Firewalld防火墙,Firewalld是能提供动态管理的防火墙,支持网络/防火墙区域,用于定义网络连接或接口的信任级别。支持IPv4和IPv6防火墙设置、以太网桥接和IP集。将运行时…

【NLP 23、预训练语言模型】

人类发明后悔,来证明拥有的珍贵 —— 25.1.15 Bert的优势:① 预训练思想 ② Transformer模型结构 一、传统方法 VS 预训练方式 Pre-train: ① 收集海量无标注文本数据 ② 进行模型预训练,并在任务模型中使用 Fine-tune&#xff1a…

嵌入式硬件基础知识

1.电阻(主要是贴片电阻) 01 基础课程-电阻 1.电阻封装 2.相关参数 1.功率额定值: 电阻能够长期承受的最大功率,功率过大可能导致电阻过热或损坏。封装尺寸越大,散热能力越强,功率额定值通常越高。 2.容差: 电阻…

VMware建立linux虚拟机

本文适用于初学者,帮助初学者学习如何创建虚拟机,了解在创建过程中各个选项的含义。 环境如下: CentOS版本: CentOS 7.9(2009) 软件: VMware Workstation 17 Pro 17.5.0 build-22583795 1.配…

DeepSeek+Kimi 一键生成100种PPT

一 简介 PPT在工作中经常用到,无论是给老板汇报,还是同事、朋友之间的分享,或是去见投资人:) ,都离不开它,然而写PPT经常让人感觉不胜其烦,无论是逻辑的展开、还是页面的布局、字体、配图,都像个…

循环神经网络rnn

1.了解词嵌入层的作用 2.了解循环网络层的作用 1.词嵌入层 将文本进行数值化,词嵌入层首先会根据输入的词的数量构建一个词向量矩阵,例如:我们有 100 个词,每个词希望转换成 128 维度的向量,那么构建的矩阵形状即为:100*128,输入…

雷池WAF动态防护技术实测

作者; Hacker / 0xh4ck3r 介绍 长亭雷池(SafeLine)是由北京长亭科技有限公司耗时近10年研发并推出的Web应用防火墙(WAF),其核心检测能力由智能语义分析算法驱动。雷池旨在为用户提供高质量的Web攻击防护、…

MATLAB应用介绍

MATLAB 数据分析 MATLAB 在数据分析方面的强大功能和优势,涵盖数据处理、分析、可视化、结果分享等多个环节,为工程师和科学家提供了全面的数据分析解决方案。 MATLAB 数据分析功能概述:工程师和科学家利用 MATLAB 整理、清理和分析来自气候学…

玩机日记 14 飞牛fnOS部署qBittorrent、AList、Jellyfin,实现下载、存取、刮削、观看一体的家庭影音中心

目录 观前提示: 1、前置条件 2、安装配置qBittorrent 简单配置 延时启动 配置AList的离线下载 配置qBittorrent不走代理 3、安装配置Jellyfin 建立媒体库目录 安装Jellyfin 配置Jellyfin媒体库 打开硬件解码 启用备用字体 配置Jellyfin的SSL 观前提示&…

基于全志T527+FPGA全国产异步LED显示屏控制卡/屏幕拼接解决方案

T527FPGA方案: 内置8核Cortex-A55,主频最高1.8Ghz;G57 MC1 GPU,2Tops算力NPU;同时内置1RISC-V2DSP核,拥有4K高清解码强大性能,配备多种显示接口与2千兆以太网口,4RS485(…

电脑键盘知识

1、键盘四大功能区 1. 功能区 2. 主要信息输入区 3. 编辑区 4. 数字键盘区 笔记本电脑键盘的功能区,使用前需先按Fn键 1.1、功能区 ESC:退出 F1:显示帮助信息 F2:重命名 F4:重复上一步操作 F5:刷新网页 …

代码审计入门学习

简介 HadSky轻论坛程序为个人原创PHP系统,作者为蒲乐天,后端基于puyuetianPHP框架驱动,前端基于 puyuetianUI框架驱动,默认编辑器为puyuetianEditor富文本编辑器,其他非原创框架及驱动JQuery.js 及Font-Awesome字体库…

基于 C++ Qt 的 Fluent Design 组件库 QFluentWidgets

简介 QFluentWidgets 是一个基于 Qt 的 Fluent Designer 组件库,内置超过 150 个开箱即用的 Fluent Designer 组件,支持亮暗主题无缝切换和自定义主题色。 编译示例 以 Qt5 为例(Qt6 也支持),将 libQFluentWidgets.d…