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万+

Ovito隐藏技巧:用Expression Selection快速提取分子链(附模糊背景配置参数)

本文详细介绍了Ovito软件中Expression Selection功能的隐藏技巧,用于从复杂的分子动力学模拟数据中快速、精准地提取目标分子链。通过结合Expand Selection和Invert Selection等修饰器,形成一套高效的工作流,并深入解析了实现SCI论文级渲染效果的景深模糊参数配置,帮助研究者大幅提升数据处理与图片生成效率。

pz890123的博客 867

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

告别手动标注!PDMS NakiToolkit插件安装与初体验:以Pipeline工具为例

本文详细介绍了PDMS NakiToolkit插件的安装与使用,特别是其Pipeline工具如何通过自动化标注和材料统计功能大幅提升三维工厂设计效率。从环境准备到实战演示,帮助工程师告别繁琐的手动标注工作,实现项目交付周期的大幅缩短。

weixin_30047059的博客 350

从零实现机械臂抓取仿真:用MoveIt+Gazebo完成物体pick&place全流程

本文详细介绍了如何使用ROS的MoveIt框架与Gazebo仿真环境,从零构建机械臂抓取仿真系统。涵盖环境搭建、MoveIt配置、Gazebo集成、抓取动作实现等全流程,帮助开发者掌握机械臂控制的核心技术,实现高效的pick&place任务。

weixin_29250403的博客 476

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

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

huanger_的博客 640

基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台

基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台

宁波阿成的博客 900

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

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

happybird100的博客 4326

MATLAB代码实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响

这段MATLAB代码主要实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响。通过以上步骤,该代码能够找到一条在考虑船舶性能和气象条件下,从大连港到格拉斯通港的较优航线,最小化燃油消耗和航行时间的加权和。

AI的内部世界的博客 512

[QMT量化交易小白入门]-三十五、如何将聚宽策略信号转为QMT实盘交易

Flask是一个轻量级的Web应用框架,它提供了简单而灵活的方式来构建Web应用程序。在本案例中,将使用Flask来搭建一个本地服务,用于监听来自jq2qmt.py脚本的交易信号,并根据信号执行相应的下单操作。

木头大左的博客 2692

使用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

【ComfyUI】Flux 完整版文生图

本文介绍了一个基于Flux Dev的AI文生图全流程工作流,通过整合扩散模型、文本编码器和VAE解码器等核心组件,实现从文本到高清图像的端到端生成。工作流包含模型加载、条件构建、潜空间采样、图像解码和成果保存五个关键环节,支持高分辨率图像的细节还原和艺术风格塑造。应用场景涵盖艺术创作、内容生产、教学演示和科研数据准备等领域,适用于对画质和提示遵循性要求严格的场景。文章还提供了相关开发资源和学习教程链接,帮助用户深入理解AI绘图机制和实际应用。

Mr数据杨 1276
上一篇: 【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、付费专栏及课程。

余额充值