nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器

基于Nginx+nginx-rtmp-module+ffmpeg搭建rtmp、hls流媒体服务器(二) 动态进行rtmp转换,需要用到Python和Redis controller.py # -*- coding:utf-8 -*- import subprocess import time import argparse import redis import sys import codecs sys.stdout = codecs.getwriter("utf-8")(sys.stdout.... 阅读详情

Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒体服务器.

这个流媒体服务器可以支持RTMP和HLS(Live Http Stream)

从安装开始

Nginx的安装参照我之前的这个: http://blog.youkuaiyun.com/redstarofsleep/article/details/45092127

不同的是在configure的时候需要增加nginx-rtmp-module的支持,下载好nginx-rtmp-module后解压,然后nginx安装时增加这个模块(–add-module),其它都是一样的.

    ./configure --prefix=/usr/local/nginx --with-pcre=/home/user/pcre/pcre-8.32 --with-zlib=/home/user/zlib/zlib-1.2.8 --with-openssl=/home/user/openssl/openssl-1.0.1i  --add-module=/home/user/nginx-rtmp-module

FFMPEG的安装参照上一篇: http://blog.youkuaiyun.com/redstarofsleep/article/details/45092145

nginx配合ffmpeg做流媒体服务器的原理是: nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流. HLS也是差不多的原理,只是最终客户端是通过HTTP协议来访问的,但是ffmpeg推送流仍然是rtmp的.
在这里插入图片描述
安装完成后,打开Nginx的配置文件nginx.conf进行配置

首先在里面加入rtmp的配置

rtmp {
    server {
        listen 1935;
 
        application myapp {
            live on;
        }
        application hls {
            live on;
            hls on;
            hls_path /tmp/hls;
        }
    }
}

然后,针对hls,还需要在http里面增加一个location配置

location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
}

这是一个最简单,最基础的配置, rtmp监听1935端口,如果是hls的话用hls on开启hls,并且为hls设置一个临时文件目录hls_path /tmp/hls; 其它更高级的配置可以参看nginx-rtmp-module的readme,里面有比较详细的介绍其它的配置,并且它还提供了一个通过JWPlayer在网页上播放的例子.

保存完配置文件后,启动nginx,通过netstat -ltn命令可以看到增加了一个1935端口的监听.8080是nginx默认的http监听端口.

# netstat -ltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:1935            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN  

然后用ffmpeg推流到nginx:

第一个是推到了上面配置的myapp上:

ffmpeg -re -i "D:\download\film\aqgy\02.mp4" -vcodec libx264 -vprofile baseline -acodec aac
 -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://server:1935/
myapp/test1

第二个推送到hls上:

ffmpeg -re -i "D:\download\film\aqgy\02.mp4" -vcodec libx264 -vprofile baseline -acodec aac
 -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://ip:1935/
hls/test2

现在我们的流媒体服务器有两个实时流了,一个是rtmp的,另一个是hls的,用流媒体播放器播放一下,流媒体播放器可以用vlc也可以用ffmpeg带的ffplay.手机也是可以播放的.



上面这两个流的地址分别是:

第一个就是推送的地址: rtmp://serverIp:1935/myapp/test1

第二个是HTTP地址: http://serverIp:8080/hls/test2.m3u8

最后贴上一段对于HLS这个比较特殊的流媒体协议的解释:

(这段解释来自: http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html)

HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。

这里也可以使用开源的obs软件进行简单推流
在这里插入图片描述
在设置->串流 中填写信息:URL为 rtmp://xxx:1935/hls,xxx为你的服务器的IP地址,hls是在流媒体服务器中用来存放流媒体的文件夹。

秘钥可以随便填写一个,用来播放的时候识别播放哪个流媒体的,例如填写test等

填写完毕后,点击开始串流,就说明我们的流媒体服务器搭建成功,这里推流会把流媒体文件推送到服务器文件夹内,生成一个test.m3u8流媒体文件。

推流成功后开始拉流(观看直播)

Html5自带的video标签就可以观看

<video>   
    <source src="http://xxx:81/hls/test.m3u8"/>
</video> 

在IOS下的safar浏览器直接可以观看,安卓和winows系统下可能需要借助播放器观看。

不过直播的延迟比较高,这是因为服务器将视频流切断成一个个小的以.ts结尾的文件,我们访问的是.m3u8文件,这个文件内容是将一个个ts文件串联起来的,这就达到了一个播放的效果,所以看起来会有很大的延迟。

如果降低延迟也不是没有方法,可以设置切片生成的大小以及访问的速度,但是这样大大增加了服务器的压力。

当然,我们也可以用rtmp拉流工具(VLC等)来看该直播,拉流地址与推流地址一致,这样能减少延迟。

要考虑具体情况要保持延迟和服务器压力间的均衡。

最后要注意的是,拉流时,如果在其他服务器使用播放器请求流媒体服务器的文件,会涉及到跨域。

这时候要在流媒体服务器root目录下加入 crossdomain.xml 文件,文件内容为

<?xml version="1.0" encoding="utf-8"?>
<cross-domain-policy>
    <allow-access-from domain="*"/>   这里可设置允许请求的域名
</cross-domain-policy>

以上就可以完成一个简单的流媒体服务,进行直播。

ffmpeg+nginx+nginx-rtmp-module 搭建 rtmp hls http 流媒体服务器 HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒体服务器。 阅读详情

相关推荐

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)

本文图文并茂地介绍了如何安装nginx+rtmp+ffmpeg组合套装,为了偷懒不重复上传同样的文本和图片信息,直接附上本人的制作的文档链接,请点击直接查看。 【腾讯文档】Nginx+rtmp+ffmpeg安装 https://docs.qq.com/doc/DWFRpSVBOWENLdnV4 ...............

a342874650的专栏 4958

Nginx+rtmp+ffmpeg搭建视频转码服务

(1)首先安装yasm, FFmpeg 为了提高编译速度,使用了汇编指令,如MMX和SSE等。因为nginx搭建流媒体服务需要用到 nginx-rtmp-module 模块,所有先安装nginx-rtmp-module。还可以使用浏览器这样访问 http://192.168.1.11/hls/22.m3u8。此时通过端口查看命令可以看见linux监听的80端口和1935端口已经全部启动。(3)拷贝命令到/usr/bin(方便后面调用)打开VLC 媒体——>流——>网络。(4) 通过ffmpeg推流。

那些乐趣的博客 7865

ffmpeg文件生成m3u8文件及ts切片程序+128位加密

ffmpeg文件生成m3u8文件及ts切片程序+ffmpeg切割TS带加密

ffmpeg推流+NGINX(RTMP)+VLC-QT拉流(Win7)

基于Win7系统,配置、编译实现以带RTMP模块的Nginx作为流媒体服务器,FFmpeg推流,VLC-QT拉流的RTMP流推拉全流程Demo

蚂蚁寻路 3052

nginx+ffmpeg.zip

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务 Fmpeg 是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西。它支持最晦涩的古老格式,直到最尖端的格式

利用nginx与ffmpeg搭建流媒体服务器过程详解

需求 本文介绍的是利用nginx和ffmpeg搭建流媒体服务器的过程。例如这种场景:公司内部需要同时观看在线直播时,如果每个人直接观看必然给出口带宽带来压力,影响正常访问外网的同事。所以可以在内网通过nginx+ffmpeg拉一路直播流,然后内网的用户访问内网的这台流媒体服务器即可。通过nginx+ffmpeg还可以实现推流、拉流、转推甚至利用FFmpeg实时切片、视频处理等,实现一套直播服务模型。 环境 系统环境:CentOS release 6.7 (Final) 步骤 安装ffmpeg 安装过程参考官方文档:https://trac.ffmpeg.org/wiki/Compilat

基于Nginx+nginx-rtmp-module+ffmpeg搭建rtmp、hls流媒体服务器

上篇文章是基于Red5与ffmpeg实现rtmp处理NVR或摄像头的监控视频处理方案,有兴趣的朋友可以查看。Nginx及nginx-rtmp-module安装新建目录mkdir /usr/local/mginx下载cd /usr/local/nginx wget http://nginx.org/download/nginx-1.12.2.tar.gz wget https://codeload....

gmHappy 1万+

从气象预报到物流规划:多尺度地理加权回归(MGWR)在ArcGIS Pro中的实战应用

本文深入探讨了多尺度地理加权回归(MGWR)在ArcGIS Pro中的实战应用。通过对比传统GWR模型,MGWR的核心优势在于能识别不同解释变量的独特空间作用尺度,有效解决空间异质性问题。文章结合气象预报误差修正与物流网点选址两个案例,详细讲解了从数据准备、参数设置、带宽优化到结果解读的全流程,为地理数据分析师处理复杂空间数据提供了强大工具。

egg99的博客 1030

nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器服务器

转载自:https://mp.weixin.qq.com/s/SGCoDd3-f4p_YBIf7_nd1Q nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器服务器 txp玩Linux 昨天 前言 今天给大家分享一篇利用nginx来搭建流媒体服务器,关于Nginx的安装可以看我之前的文章,我之前之所以会写nginx的文章是有一定的道理的,过段时间我会写一些协议栈的学习总结分享: nginx之静态资源访问和负载均衡的使用! 不同的是,我们这里需要添加一个模块:confi

自主无人机 PX4 ROS SLAM 路径规划 MVS等技术分享 422

CSAPP performance lab

CSAPP 深入理解计算机系统的performance Lab

weixin_46091531的博客 1250

LightGBM参数调优实战:从基础到高级技巧

本文深入探讨了LightGBM参数调优的实战技巧。文章从理解其Leaf-wise生长策略的核心逻辑出发,系统性地介绍了分层调参策略:首先调整控制模型结构的参数(如num_leaves),其次优化学习能力参数(如learning_rate),最后通过正则化与随机化参数提升泛化能力。文中还提供了从建立基线到最终微调的完整实战流程与高级避坑指南,帮助读者高效提升模型性能。

i8j9k0l1的博客 262

FFmpeg,Nginx-rtmp-module搭建简易的流媒体服务器

学习笔记——FFmpeg,Nginx-rtmp-module 说明:仅代表个人理解,肯定会有理解不准确的地方,劳烦指正,没有复制粘贴文档中的官方语言 一、FFmpeg的安装以及使用 1、FFmpeg简介 ffmpeg就是一款基于命令行操作的,处理视频的开源工具,比较轻量比较好用,主要功能有音视频分离,视频转码,视频切片,加滤镜等功能。官网地址:www.ffmpeg.org,由于外国的网站,下载可能比较慢,也是全英文的,所以推荐个中文文档https://my.oschina.net/u/236747.

huanger_的博客 640

如何在高版本的ubuntu系统里安装gcc4.1.2

1、下载安装包,一共五个http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-4.1/,根据计算机系统位数   进行下载,64位下载amd64结尾的。开头分别是cpp-4.1_4.1.2、g++-4.1_4.1.2、gcc-4.1-base_4.1.2、gcc-     4.1_4.1.2、libstdc++6-4.1 2、使用sudo d

lsr_fighting的博客 1931

nginx-rtmp-module和ffmpeg搭建流媒体服务器

万事俱备,只欠东风,安装完毕nginx-rtmp-module 和ffmpeg后,就可以开始搭建流媒体服务器了哈。下面是具体步骤:      一、配置nginx.conf   打开nginx配置文件,在里面添加如下配置:rtmp { server { listen 1935; application myapp { live on; } applic

happybird100的博客 4326

手把手教你配置SAP PP供应区域(Supply Area):实现线边仓精准发料与物料流优化

本文详细解析了SAP PP供应区域(Supply Area)的配置方法,帮助企业实现线边仓精准发料与物料流优化。通过三级优先级逻辑和四步配置法,系统可自动识别最优组件来源位置,显著提升生产订单处理效率和库存准确率。文章还提供了典型问题解决方案和性能优化技巧,适用于离散制造和重复制造场景。

weixin_29275257的博客 431

手把手教你学GPU的KMD专栏--2.4 GPU固件加载与初始化流程

GPU固件(Firmware)是嵌入在GPU芯片ROM或EEPROM中的低级代码,是GPU启动时首先执行的程序。它负责GPU硬件的基础初始化和基本功能配置,是GPU与操作系统之间的"第一道桥梁"。与操作系统驱动不同,固件在CPU启动后、操作系统加载前就已执行,是硬件层面的"启动代码"。关键认知:GPU固件是GPU的"BIOS",没有它,GPU硬件无法进入可操作状态。就像CPU需要BIOS来初始化内存和外设一样,GPU需要固件来初始化其核心组件。

MHD0815的博客 111

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器

参考: 1,使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(一)http://blog.youkuaiyun.com/xdwyyan/article/details/431989852,使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(二)http://blog.youkuaiyun.com/xdwyyan/article/details/432...

weixin_30521649的博客 106

关于 SAP Fiori Elements 开发项目里的本地 annotation.xml 文件

文件通过引用 SAP 提供的标准词汇表和本地 OData 服务的元数据,为 Fiori Elements 应用定义了一个基础的注解结构。开发者可以在此基础上添加具体的注解,以满足特定的业务需求和界面定制。文件用于定义本地注解,以补充或覆盖来自后端 OData 服务的元数据。元素内添加具体的注解,以定制 Fiori Elements 应用的界面和行为。的架构,用于在本地注解中定义实体、类型和注解。这使得在本地注解中可以引用该 OData 服务的实体和类型。等,用于控制界面元素的显示和行为。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 471
上一篇: 【SpringBoot源码篇】springboot如何加载启动的
下一篇: 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
_Romeo
_Romeo 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域
博客等级 码龄8年 2万+粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值