实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解
注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明。可以对照这些命令详解配置nginx -rtmp服务
一、nginx的hls配置实例
注:nginx采用nginx1.9.x版本
实例配置如下(下面会讲解每个指令的含义和用法):
rtmp
{ server
{
listen 1935;
chunk_size 8192; #vod config application vod
{
play /var/vod/flv;
} #live config application live
{
live on;
max_connections 1024;
allow play all; record_path /var/live; recorder audio
{
record audio;
record_suffix -%d-%b-%y-%T.flv;
}
recorder chunked
{
record all;
#record_max_size 5120K;
record_interval 15s;
record_path /var/live/chunked;
}
} #hls application hls
{
live on;
hls on;
hls_path /var/hls;
hls_playlist_length 30s;
hls_sync 100ms;
meta on;
recorder chunked
{
record all;
#record_max_size 5120K;
record_interval 15s;
record_path /var/hls/Chunked;
}
recorder audio
{
record audio;
record_suffix -%d-%b-%y-%T.flv;
}
} }
}
二、配置详解
1、rtmp{}
是一个用于保存所有rtmp配置的块
在这里就是rtmp直播录播配置的根
2、server{}
server块里面放服务器实例,比如配置里的三个application(application在第6个解释)
3、listen
listen比较好理解,监听某个端口,让nginx监听并接收rtmp连接
4、chunk_size
接收网络流的块大小,接触过NIO的应该比较清楚,基于块比基于流效率要高,chunk_size默认值是4096,至少128,数字越大服务器负载越高,服务器调优这里较为重要
5、注释:#
nginx配置文件里使用‘#’作为注释
6、application
见名知意,创建一个应用/实例,后面接上应用实例类型,如上配置,创建了三个应用,比如上面配置的三个服务器应用实例:(1)rtmp录播(vod),(2)rtmp直播(live),(3)hls直播(hls)
重要:rtmp模块的配置与nginx的http模块是两种不同的配置指令,两者不要混淆
7、vod(录播)配置详解
play 录播的播放目录
8、live(直播)配置详解
(1)live on/off
直播模式,一对多广播
(2)max_connections
最大连接数,rtmp直播流协议属于长连接协议,服务器能开多少连接要把握好,hls协议是基于http的协议,所以理论上要比rtmp协议并发量要高很多
(3)allow play/publish all/ip地址
允许来自指定的地址/所有地址播放和发布
比如上面配置使用allow play all允许所有地址播放实时流,如果设置成allow play 127.0.0.1 就是只允许本地播放;
再举个例子:allow publish 127.0.0.1就是允许本机发布实时流,其他地址都不能发布。
(4)record_path
用来指定录制文件的目录,默认是/tmp
(5)record off/all/video/audio/keyframes/maual
record off:什么都不录制
record all:录制所有
record video:只录制视频
record audio:只录制音频
record keyframes:只录制关键帧
record maual:通过接口控制录制的启动停止
可以进行组合,比如:record video keyframes:就是只录制视频关键帧
(6)record suffix
录制文件的文件名后缀,默认是.flv
比如上面的配置 record suffix -%d-%b-%y-%T.flv,录制文件生成文件名就是这样(举例):应用名-24-Jul-04-17:07:45.flv
(7)record_max_size
上面配置:record_size 5120k,录制文件的最大值是5M
(8)record_interval
配置里的:record_interval 15s,就是录制文件的间隔,间隔15秒开始下一个片段的录制;
设置成 record_interval 0就是录制视频文件没有间隔;
设置成record-interval off就会把所有视频流全都写到一个文件里去。
重要:想要把流媒体保存文件,这个可以用来做文件分片,可以按天或者按小时生成新的文件,很实用的功能
9、hls直播配置详解
(1)hls on
这个参考 live on就行了,很简单,就是开不开启hls,hls off就是不开启
(2)hls_path
就是录制视频文件的目录/路径
(3)hls_playlist_length
hls播放列表长度,默认30分钟,这里设置成30秒:hls_playlist_length 30s
(4)hls_sync
设置hls时间戳同步阈值,通俗一点就是强制的音/视频同步,可以防止音画不同步的现象,默认是2ms,
(5)meta on
切换发送视频元数据到客户端,默认就是meta on,如果想要用修改后的视频得用meta off了
三、本篇文章的配置文件就只有上面那么多,下面补充一些常用到的nginx rtmp指令
1、recorder块
创建录制块,可以在application块中添加多个recorder记录,recorder块中可以使用所有录制指令,recorder块继承application块中的录制指令。(所有record开头的都是录制指令)。
live指令补充:
2、wait_key
wait_key指令是否等待视频从一个关键帧开始(录播想要实现视频的进度随意控制就需要视频中存在关键帧),
默认是off:不开启,设置为on:开启。
3、drop_idle_publisher
终止指定时间内空闲的发布连接,默认是不开启,如
drop_idle_publisher 10s;
推荐开启该功能
4、sync
同步音频和视频,默认是 sync 300ms。
这是很常见的问题,如果用户的带宽不足就会自动丢掉一些帧,这时就会产生同步问题;
sync指令作用就是隔一段时间发送一个时间戳来同步音频和视频。
5、meta
发送元数据到客户端,默认是 meta on;meta off就是不发送元数据,一般不需要更改。
(音视频的元数据包含一些视频的基本信息,比如标题,文件大小,关键帧,视频长度等等信息)
record指令补充:
1、record_unique
是否添加时间戳到录制文件,默认是 record_unique off:不添加
不开启的效果就是同样的录制文件每次录制的时候都会被覆盖重写,当然可以通过给文件名添加时间后缀的形式避免,其实两个效果是一样的,一个可以控制格式,一个不能控制格式的问题
2、record_append
切换文件的附加模式,默认是record_append off
如果设置成on开启的话录制的时候就会在老文件后面追加视频,不开启的效果就是上面讲到的覆盖重写
3、record_lock
录制的时候锁定文件,默认是off;
不锁定的话,客户端可以实时播放录制的视频,可以达到跟直播一样的效果了
4、record_max_frames
录制文件的最大视频帧数量,比如record_max_frames 20 就是这个录制文件最大20个视频帧(视频帧的作用上面已经解释过了,用来控制进度拖放的)
HLS指令补充:
未完待续
实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解的更多相关文章
- WIFI实时监控追踪小车演示视频——安卓端、小车
文章由@超人爱因斯坦出品,转载请注明出处. 文章链接: http://hpw123.net/a/qingsongyike/yingyinqu/2014/1019/59 ...
- PHP网站开发方案
一. 开发成员 a)项目主管 b)页面美工c)页面开发 d)服务端程序开发e)系统与数据管理f)测试与版本控制 二. 网站组开发简明流程 三. 开发工具与环境 a) 服务器配置i. WEB服务器: F ...
- 抛开flash,自己开发实现C++ RTMP直播流播放器
抛开flash,自己开发实现C++ RTMP直播流播放器 众所周知,RTMP是以flash为客户端播放器的直播协议,主要应用在B/S形式的场景中.本人研究并用C++开发实现了RTMP直播流协议的播放器 ...
- Java开发视频网站大概需要多少钱?
这个还真不好说,需要看你对视频网站有什么要求?你的数据库选择的是什么型号的?需要开发几个页面?服务器是需要高端的还是中低端的?还有你对完成时间有什么要求,这些细节也是决定价格的关键因素. 上面这些因素 ...
- nginx开发(四)调用ffmpeg,搭建rtmp直播流。
1: 修改conf文件,配置rtmp直播 打开usr/local/nginx/conf/nginx.conf,添加红色内容: rtmp {#rtmp点播配置 server { li ...
- QT | 聊聊QT与直播流播放——从QMediaPlayer到Qt-AV
[原创文章,转载请注明来源,方便查看本文更新] 这段时间需要用QT开发一个播放直播流的功能,能够播放各种格式的直播流,并且CPU占用率不要太高(可以占用GPU),这些是我们的目标. 直播流推流的技术进 ...
- ffmpeg处理RTMP流媒体的命令和发送流媒体的命令(UDP,RTP,RTMP)
将文件当做直播送至live ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName re限制输出速率, ...
- 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)
前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流, ...
- 收藏:视频网站(JavaEE+FFmpeg)/Nginx+ffmpeg实现流媒体直播点播系统
FFmpeg安装(windows环境)http://www.cnblogs.com/xiezhidong/p/6924775.html 最简单的视频网站(JavaEE+FFmpeg)http://bl ...
随机推荐
- 热爱H5
我不去想是否能够功成名就既然选择了前端便只顾埋头于无声 我不去想能否赢得掌声既然钟情于IT就勇敢得踏步前行 我不去想前行的路上会不会日暮穷途既然目标是未来留给现在的只能是汗水 我不去想所谓的成功是不是 ...
- Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理
原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...
- HTML ——Flex弹性布局
弹性盒布局的使用 1.为父容器添加display:flex或inline-flex属性 (Webkit内核的浏览器,必须加上-webkit前缀.) 容器默认存在两根轴:主轴(main axis)和交叉 ...
- 【Uva 10498】满意值
Description Kaykobad教授把为ACM选手买饭的任务交给了Nasa.Nasa决定买n种不同的食物.然后他询问了m名选手对每种食物的需求量.选手们当然不会给出任何符合逻辑的回答,他们只是 ...
- [ext4] 磁盘布局 - extent tree
传统的类Unix文件系统,比如Ext3,都是使用一个间接数据块映射表来记录每一个数据块的分配情况的.但是这种机制对于超大文件的存储是有缺陷的,特别是当对超大文件进行删除和截断操作时.映射表会对每一个数 ...
- typedef和define的详细区别
typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字. #define是预处理指令.下面让我们一起来看. typedef是C语言语句, ...
- 关于li标签之间的间隔如何消除!
问题:li标签用了display:inline之后虽然成功的合并在一行,但是li标签之间出现了间距. 原因:按enter键换行之后li标签之间存在着空格,正是这些空格占据了li标签之间的空间. 解决方 ...
- 开源分布式任务调度平台Cuckoo-Schedule
1 概述 1.1 平台概述 Cuckoo-Schedule是基于Quartz-Schedule的轻量级任务调度框架,具有易学习.易上手.开发高效稳定的特点.Demo地址:ht ...
- fread读入优化,寻找速度极限
序: 在之前的测试中,我们比较了四种读入方式,发现使用读入优化是最快的选择,但是我们知道fread()是比它更快的方法.这一次,我们对比四种读入优化,探寻C++读取速度的极限. 分别是getchar( ...
- 精选this关键字的指向规律你记住了吗
1.首先要明确: 谁最终调用函数,this指向谁 this指向的永远只可能是对象!!!!! this指向谁永远不取决于this写在哪,而取 ...