RK3568学习之Nginx移植+RTMP推流

1.下载 Nginx 源码

  1. 进入到 Ubuntu 系统的某个目录下,下载 Nginx 源码:
wget http://nginx.org/download/nginx-1.20.0.tar.gz

这里我们下载的是 1.20 版本,这是比较新的版本了。下载完成之后将得到一个名为 nginx-1.20.0.tar.gz的压缩包文件。

  1. 下载 nginx-rtmp-module 模块
    事实上,原生的 Nginx 并不支持 RTMP,我们需要安装第三方模块 nginx-rtmp-module 插件使其支持RTMP。通过下面这条命令下载 nginx-rtmp-module。
git clone https://github.com/arut/nginx-rtmp-module.git

2.交叉编译 Nginx

将下载得到的 nginx-1.20.0.tar.gz 文件进行解压:

tar -xzf nginx-1.20.0.tar.gz

解压之后生成 nginx-1.20 文件夹,进入到该目录下。在进行交叉编译之前,先指定交叉编译工具使用哪个编译链的gcc和g++,并且设置这两条命令所在路径在环境变量PATH中:

export CC=aarch64-buildroot-linux-gnu-gcc
export CXX=aarch64-buildroot-linux-gnu-g++

首先配置源码、接下执行 make 编译源码,最后执行 make install 安装即可!总共的步骤就这三个,但
事实上在编译的过程中会出现一些问题,我们稍后再看!

3.配置源码

首先第一步是配置源码,在配置之前,需要进行一个简单的修改,否则配置通不过;首先打开 nginx 源码目录下的 auto/cc/name 文件,将 21 行处的”exit 1”给注释掉!如下所示:
在这里插入图片描述

修改完成之后保存退出。接着打开 auto/types/sizeof 文件,将 15 行处的” ngx_size=”修改为” ngx_size=4”,
并且将 36 行处的”$CC”修改为”gcc”,如下所示:
在这里插入图片描述
同样,修改完成之后保存退出即可!接着执行下面这条命令进行配置,其中安装路径和模块路径根据自己需求设置:

./configure --prefix=/home/tao/linux/tool/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/tao/linux/tool/nginx-rtmp-module

上述命令中,–prefix 指定了 nginx 的安装路径,为了方便直接将其安装到 nginx 源码目录下的 install目录中;–add-module 用于添加第三方模块,譬如我们前面下载的 nginx-rtmp-module,所以–add-module 需要指向 nginx-rtmp-module 源码路径,大家根据自己的实际路径填写。
配置成功打印信息如下所示:
在这里插入图片描述
配置完成之后,接着我们执行 make 编译,本次编译并不会成功,将会出现如下错误打印信息:
图 34.2.10 编译报错

这个时候我们需要修改 nginx 源码目录下的 objs/ngx_auto_config.h 文件,将如下内容添加到该头文件中:

#ifndef NGX_HAVE_SYSVSHM
#define NGX_HAVE_SYSVSHM 1
#endif

添加完成之后保存退出,再次执行 make 编译,这样就会编译成功了。编译成功之后,接着我们进行安装,执行 make install,进入到 install 目录下:
conf 目录下有很多的配置文件,:其中 nginx.conf 配置文件很重要,后续我们会对该配置文件进行相应的配置。
sbin 目录下有一个可执行程序 nginx,这个可执行文件是一个“notstripped”文件,说明该文件包含了很多的调试信息,所以导致该文件特别
大 7.5MB,可以执行下面这条命令去掉调试信息、减少文件的大小:

aarch64-buildroot-linux-gnu-strip --strip-debug nginx

现在我们需要将安装目录下的这些文件拷贝到开发板 Linux 系统上,再进行拷贝之前,需要先将开发板出厂系统中已经移植好的 nginx 给移除,进入到开发板 Linux 系统中,执行下面这些命令移除出厂系统自带的 nginx 程序和相应的配置文件:

rm -rf /usr/sbin/nginx
rm -rf /etc/nginx/*

接下我们将 nginx 安装目录下 sbin 中的 nginx 拷贝到开发板 Linux 系统/home/root 目录下:
接着再将安装目录下的 conf、logs、html 文件夹拷贝到开发板 Linux 系统的/etc/nginx 目录下:

4.测试 nginx

上小节我们已经将 nginx 移植到了开发板上,本小节进行测试、验证,看看 nginx 是否能够正常工作。
先重启开发板,重启进入系统后,进入到/home/root 目录下,执行 nginx 程序。

./nginx -V # 查看版本信息
./nginx -h 查看帮助信息:

接下来我们要启动 nginx,执行如下命令:
./nginx -p /etc/nginx
此时 nginx 服务便在后台运行了,通过 ps 命令可查看到:ps -aux
此时我们可以打开电脑浏览器,输入开发板的 IP 地址,即可看到默认欢迎网页

5.配置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; # 打开直播
			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

6.使用 FFmpeg 推流

nginx 重启之后,接着我们便可使用 FFmpeg 进行推流,将视频流数据通过 RTMP 推给 nginx 流媒体服务器,执行如下命令进行推流:

ffmpeg -re -i ./test.mp4 -vcodec libx264 -acodec copy -f flv rtmp://127.0.0.1/live/mytest

简单地介绍一下这些参数,首先-i 表示输入视频数据,这里我们使用了一个 mp4 视频文件;rtmp://127.0.0.1/live/mytest 表示将视频流通过 RTMP 推给流媒体服务器,这里因为我们的服务器和推流端都是开发板,所以这个 IP 地址 127.0.0.1 指的就是本机的流媒体服务器。
使用vlc输入流媒体服务器的 IP 地址以及路径:
在这里插入图片描述
接下来我们再使用摄像头进行测试,使用 FFmpeg 采集摄像头视频数据将其发送给 nginx 流媒体服务器,执行如下命令:
ffmpeg -f v4l2 -video_size 320x240 -framerate 15 -i /dev/video0 -q 10 -f flv rtmp://127.0.0.1/live/mytest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/893344.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

思想实验思维浅谈

思想实验思维浅谈 思想实验(Thought Experiment)是一种在思想中进行的假想实验,思想实验激发人的想象力和思辨能力,是科学家思考问题的重要工具,通过想象、推理和分析来探索某种理论、假设或概念的可能性和内在逻辑&am…

微服务架构 --- 使用Sentinel来处理请求限流+线程隔离+服务熔断

目录 一.什么是Sentinel? 二.Sentinel的核心概念: 三.Sentinel的使用: 1.在本地运行Sentinel控制台: 2.在微服务模块导入依赖以及配置文件: (1)导入依赖: (2&#…

RPC通讯基础原理

1.RPC(Remote Procedure Call)概述 RPC是一种通过网络从远程计算机上调用程序的技术,使得构建分布式计算更加容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性,提供一种透明调用机制,让使用者不…

数据字典是什么?和数据库、数据仓库有什么关系?

一、数据字典的定义及作用 数据字典是一种对数据的定义和描述的集合,它包含了数据的名称、类型、长度、取值范围、业务含义、数据来源等详细信息。 数据字典的主要作用如下: 1. 对于数据开发者来说,数据字典包含了关于数据结构和内容的清晰…

centos7上安装minio及使用方法介绍

MinIO是一个高性能、分布式对象存储系统,可以用于存储大量的非结构化数据,例如图片、视频、日志文件等。它是一个开源项目,可以在各种环境中部署,包括本地服务器、公共云和混合云环境。 github仓库地址:https://github.com/minio 一、安装说明 本章教程,是在Linux Centos…

AutoCompleteTextView

AutoCompleteTextView的学习 简单使用AutoCompleteTextView mainactivity.java import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.WindowManager; import android.widget.ArrayAdapter; import android.widget.AutoCompleteT…

【环境搭建】远程服务器搭建ElasticSearch

参考: 非常详细的阿里云服务器安装ElasticSearch过程..._阿里云服务器使用elasticsearch-CSDN博客 服务器平台:AutoDL 注意: 1、切换为非root用户,su 新用户名,否则ES无法启动 2、安装过程中没有出现设置账号密码…

“探索Adobe Photoshop 2024:订阅方案、成本效益分析及在线替代品“

设计师们对Adobe Photoshop这款业界领先的图像编辑软件肯定不会陌生。如果你正考虑加入Photoshop的用户行列,可能会对其价格感到好奇。Photoshop的价值在于其强大的功能,而它的价格也反映了这一点。下面,我们就来详细了解一下Adobe Photoshop…

Chromium 如何查找V8 引擎中JavaScript 标准内置对象

JavaScript 标准内置对象 - JavaScript | MDN (mozilla.org) 一、JavaScript 标准内置对象 本章介绍和说明了 JavaScript 中所有的标准内置对象、以及它们的方法和属性。 这里的术语“全局对象”(或标准内置对象)不应与 global 对象混淆。这里的“全局…

07 django管理系统 - 部门管理 - 搜索部门

在dept_list.html中&#xff0c;添加搜索框 <div class"container-fluid"><div style"margin-bottom: 10px" class"clearfix"><div class"panel panel-default"><!-- Default panel contents --><div clas…

【学习笔记】什么是MongoDB

文章目录 MongoDB 简介体系结构数据模型MongoDB 的特点 MongoDB 简介 学习一个东西就跟认识一个人一样&#xff0c;下面有情MongoDB来做个自我介绍 大家好&#xff0c;俺是MongoDB&#xff0c;是一个开源、高性能、无模式的文档型数据库&#xff0c;当初的设计俺就是用于简化开…

6.计算机网络_UDP

UDP的主要特点&#xff1a; 无连接&#xff0c;发送数据之前不需要建立连接。不保证可靠交付。面向报文。应用层给UDP报文后&#xff0c;UDP并不会抽象为一个一个的字节&#xff0c;而是整个报文一起发送。没有拥塞控制。网络拥堵时&#xff0c;发送端并不会降低发送速率。可以…

UNI VFX Missiles Explosions for Visual Effect Graph

Unity URP和HDRP的通用视觉效果 使用在视觉效果图中制作的高性能GPU粒子系统。 无需进入视觉效果图编辑器即可轻松自定义VFX。 使用(VFX)事件——一个游戏对象可存储多个效果,这些效果可通过C#或视觉脚本触发。 总共32个事件(不包括“停止”事件)。 ❓ 什么是(VFX)事件?…

前端开发学习(一)VUE框架概述

一、MVC模式与MVVM模式 1.1mvc模式 MVC模式是移动端应用广泛的软件架构之一&#xff0c;MVC模式将应用程序划分为3部分:Model(数据模型)、View(用户界面视图)和Controller(控制器)。MVC模式的执行过程是将View层展示给用户&#xff0c;也就是通过 HTML页面接受用户动作&#…

【算法篇】贪心类(1)(笔记)

目录 一、理论基础 1. 大纲 2. 求解步骤 二、Leetcode 题目 1. 分发饼干 2. 摆动序列 3. 最大子序和 4. 买卖股票的最佳时机 II 5. 跳跃游戏 6. 跳跃游戏 II 7. K 次取反后最大化的数组和 8. 加油站 9. 分发糖果 一、理论基础 1. 大纲 2. 求解步骤 将问题分解为…

CTFHUB技能树之SQL——MySQL结构

开启靶场&#xff0c;打开链接&#xff1a; 先判断一下是哪种类型的SQL注入&#xff1a; 1 and 11# 正常回显 1 and 12# 回显错误&#xff0c;说明是整数型注入 判断一下字段数&#xff1a; 1 order by 2# 正常回显 1 order by 3# 回显错误&#xff0c;说明字段数是2列 知道…

【Axure高保真原型】标签管理可视化驾驶舱长页面案例

今天和大家分享标签管理可视化驾驶舱长页面案例的原型模板&#xff0c;包括我的工作、通告消息、标签总体调用趋势、标签应用业务场景对比、标签使用排名、各个标签使用情况……具体效果可以点击下方视频观看或打开下方预览地址查看哦 【原型效果】 【Axure高保真原型】标签管…

Kaggle Python练习:字符串和字典(Exercise: Strings and Dictionaries)

文章目录 问题&#xff1a;搜索特定单词并定位思路代码实现官方代码代码解析 更进一步 问题&#xff1a;搜索特定单词并定位 一位研究人员收集了数千篇新闻文章。但她想将注意力集中在包含特定单词的文章上。完成以下功能以帮助她过滤文章列表。 您的函数应满足以下条件&…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,1-8

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

Excel筛选数据时用到分类汇总值

举个例子;现有分类产品销售额汇总表如下所示&#xff1a; 请找出销售额大于所在分类平均销售额的产品&#xff1a; 使用 SPL XLL&#xff0c;输入公式&#xff1a; spl("E(?1).group(CategoryName).(a~.avg(ProductSales),~.select(ProductSales>a)).conj()",A…