《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2.2  FFmpeg向网络推流”介绍了轻量级流媒体服务器MediaMTX,虽然MediaMTX使用很简单,可是不能满足复杂的业务需求,故而实际应用中需要引入专业的流媒体服务器。

nginx-rtmp是开源WEB服务器Nginx可增强的第三方rtmp模块,该模块封装了rtmp服务器,可以提供简单的rtmp流媒体服务器功能。由于Nginx本身是个高性能的WEB服务器,支持代理分发多种协议的数据,因此通过Nginx集成RTMP服务器也是个可行的方案。Nginx默认没开启rtmp模块,需要在编译nginx时添加rtmp模块,还要修改配置文件才能开启rtmp服务。

因为nginx+rtmp在Windows环境的编译过程非常麻烦,不但要考虑各种依赖包的版本兼容问题,还要注意MSYS与Visual Studio命令行的切换问题,所以这里只讲述如何在Linux环境给Ngixn集成rtmp模块,详细的集成步骤说明如下。

一、准备Nginx和nginx-rtmp-module的源码

Nginx的官网地址是https://nginx.org/,下载页面为https://nginx.org/en/download.html,最新版本为2024年4月发布的nginx-1.26.0,该版本的源码包下载链接为https://nginx.org/download/nginx-1.26.0.tar.gz。

nginx-rtmp-module的源码托管地址是https://github.com/arut/nginx-rtmp-module,各版本的下载页面为https://github.com/arut/nginx-rtmp-module/tags,最新版本为2024年4月发布的nginx-rtmp-module-1.2.2,该版本的源码包下载链接为https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.2.tar.gz。

以上源码包下载完毕后,把它们上传到Linux服务器的/usr/local/src目录下,后续将在该目录解压这些源码包。

二、编译与安装Nginx(包含集成rtmp模块)

登录Linux服务器,依次执行下列的解压命令,分别解压nginx-rtmp-module、nginx等等的源码包。

cd /usr/local/src
tar zxvf nginx-rtmp-module-1.2.2.tar.gz
tar zxvf nginx-1.26.0.tar.gz

接着进入nginx源码目录,执行以下命令配置nginx。

cd nginx-1.26.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=../nginx-rtmp-module-1.2.2

配置完毕,执行以下命令编译nginx。

make -j4

编译完毕,执行以下命令安装nginx。

make install

三、启动Nginx的RTMP服务

打开nginx安装路径下的conf/nginx.conf,在文件末尾添加下面的rtmp配置,指定rtmp协议监听的端口号和服务名。

rtmp {
    server {
        # rtmp协议的端口号
        listen 1935;
        # rtmp协议的服务名
        application live {
            live on;
        }
    }
}

添加完毕,保存nginx.conf并退出。然后运行下面命令启动nginx。

cd /usr/local/nginx/sbin
./nginx

四、检查nginx-rtmp是否正常运行

下面通过ffmpeg把视频文件向rtmp服务推流,也就是通过下面命令向rtmp://127.0.0.1/live/test推流视频文件。有关ffmpeg的详细用法参见《FFmpeg开发实战:从零基础到短视频上线》一书,这里不再赘述。

ffmpeg -re -stream_loop -1 -i "/usr/local/src/test/2018s.mp4" -vcodec h264 -f flv rtmp://127.0.0.1/live/test

然后启动电脑上的流媒体播放器VLC media player,打开网络串流“rtmp://xxx.xxx.xxx/live/test”,可见VLC media player正常播放来自rtmp链接的直播视频,说明nginx-rtmp服务正确实现了rtmp协议的流媒体传输功能。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流的更多相关文章

  1. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

  2. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  3. Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件

    前言   上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤.   受限制   因为直接配置sample的vi比较麻烦 ...

  4. FFmpeg开发笔记(四):ffmpeg解码的基本流程详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  5. FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放

    前言   ffmpeg播放rtsp网络流和摄像头流.   Demo   使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克     使用ffmpeg播放网络rtsp文件流 ...

  6. FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建

    前言   本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8.   FFmpeg简介   FFmpeg是领先的多媒体框架,能够解码 ...

  7. 网站开发进阶(四十四)input type="submit" 和"button"的区别

    网站开发进阶(四十四)input type="submit" 和"button"的区别   在一个页面上画一个按钮,有四种办法: 这就是一个按钮.如果你不写ja ...

  8. 网站开发进阶(四十二)巧用clear:both

    网站开发进阶(四十二)巧用clear:both 前言 我们在制作网页中用div+css或者称xhtml+css都会遇到一些很诡异的情况,明明布局正确,但是整个画面却混乱起来了,有时候在IE6下看的很正 ...

  9. Django开发笔记四

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.邮箱激活 users app下,models.py: ...

  10. 【Arduino】开发入门【十】Arduino蓝牙模块与Android实现通信

    [Arduino]开发入门[十]蓝牙模块 首先show一下新入手的蓝牙模块 蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机 ...

随机推荐

  1. MySQL如何查询某个字段含有字母数字的值

    在MySQL中,要查询某个字段含有字母和数字的值,可以使用正则表达式配合REGEXP操作符.以下是一个详细的示例,说明如何编写这样的查询. 假设我们有一个名为my_table的表,其中有一个名为my_ ...

  2. 动态类型语言 VS 静态类型语言

    一. 运行期动态修改类型结构 动态编程语言是高级编程语言的一个类别,在计算机科学领域已被广泛应用.它是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删除或是 ...

  3. vim快捷键之复制粘贴

    yy: 复制光标所在行 p: 将复制的内容粘贴到光标所在行的下一行 P: 将复制的内容粘贴到光标所在行的上一行

  4. itest work 开源接口测试&敏捷测试管理平台 9.5.0 GA_u4发布,优化及修复BUG

    (一)itest work 简介 itest work (爱测试)  一站式工作站让测试变得简单.敏捷,"好用.好看,好敏捷" ,是itest wrok 追求的目标.itest w ...

  5. uniapp 页面跳转传值和接收

    前端面试题库地址:https://www.yuque.com/sxd_panda/sdluga 1.首先介绍最原始的跳转方法,类似于html中的a标签,不过在uniapp中需要将a标签换成 <n ...

  6. Cygwin安装及简单说明

    1 简介 官方说明:Cygwin is a Linux-like environment for Windows. It consists of a DLL (cygwin1.dll), which ...

  7. 在 TypeScript 中,extends

    extends 是一个关键字,用于指定类型参数的约束.它在类型参数的声明中使用,以确保类型参数满足特定的条件. 具体来说,extends 后面可以跟随一个类型,表示类型参数必须是该类型的子类型.在泛型 ...

  8. react移动端组件antd-mobile

    使用react移动端组件antd-mobile完成底部导航功能实现. 官网:https://mobile.ant.design/docs/react/introduce-cn antd-mobile ...

  9. 使用swiper完成轮播图

    swiper:https://www.swiper.com.cn/usage/index.html 安装swiper cnpm i -S swiper 在功能组件中定义Swiper组件并设置好插槽 & ...

  10. FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid

    ​XviD是个开源的视频编解码器,它与DivX一同被纳入MPEG-4规范第二部分的视频标准,但DivX并未开源.早期的MP4视频大多采用XviD或者DivX编码,当时的视频格式被称作MPEG-4.现在 ...