特点
-
RTMP/HLS/MPEG-DASH 直播流
-
RTMP视频点播FLV / MP4,可从本地文件系统或HTTP播放
-
流转播支持分布式流:推拉模型
-
在多个FLV中记录流
-
支持H264/AAC 编码
-
可以用FFMPEG在线转码
-
HTTP 回调 (publish/play/record/update 等等)
-
在某些事件上运行外部程序(使用exec指令)
-
HTTP控制模块,用于记录音频/视频和丢弃客户端
-
先进的缓冲技术可将内存分配保持在最低水平,以实现更快的流传输和较低的内存占用
-
事实证明可以与Wirecast,FMS,Wowza,JWPlayer,FlowPlayer,StrobeMediaPlayback,ffmpeg,avconv,rtmpdump,flvstreamer等一起使用
-
XML / XSL中机器和人类可读形式的统计信息
-
系统支持 Linux/FreeBSD/MacOS/Windows
Windows的限制
Windows支持是有限的。 不支持这些功能
-
execs
-
static pulls
-
auto_push
RTMP的URL格式
rtmp://rtmp.example.com/app[/name]
-
app
-应该与配置中application块之一匹配(我的通俗理解就类似电视的某个频道)
-
name
-由每个应用程序解释,可以为空
多工作者实时流
该模块通过自动推送到nginx工作者,支持多工作者实时流。 使用rtmp_auto_push指令切换此选项。
rtmp {
server {
listen 1935;
chunk_size 4000;
# TV 模式: 一个发布者,许多订阅者
application mytv {
# 这个指令为开启直播功能
live on;
# 记录流的第一个1K
record all; #这个指定为录制视频,录制音视频所有
record_path /tmp/av; #这个为指定的录制音视频存放路径
record_max_size 1K;
# 这个指令为将当前时间戳加入到音视频文件的名字中,使每个音视频文件各不相同
record_unique on;
# 指定发布的地址
allow publish 127.0.0.1;
deny publish all;
}
# 使用FFMPEG转码
application big {
live on;
# 在每个已发布的流上面运行此命令
# $app为application的名字,$name为流的名字(就是上面地址格式中的name)
# 这个ffmpeg指令可以从当前application中接收流并且将分辨率降低到32x32,然后这个流
# 会已相同的名字被发布到 'small' application(就在下方)中,T
# 可以指定多个exec行。
exec ffmpeg -re -i rtmp://localhost:1935/$app/$name -vcodec flv -acodec copy -s 32x32
-f flv rtmp://localhost:1935/small/${name};
}
application small {
live on;
# 分辨率降低的视频来自ffmpeg(接收上方转码过后的视频)
}
application webcam {
live on;
# 从本地摄像头中的流(在nginx启动时就会运行的命令)
exec_static ffmpeg -f video4linux2 -i /dev/video0 -c:v libx264 -an
-f flv rtmp://localhost:1935/webcam/mystream;
}
application mypush {
live on;
# 发布到这里的每一个流
# 都会被自动的推流到以下两个机器
push rtmp1.example.com;
push rtmp2.example.com:1934;
}
application mypull {
live on;
# 从远程机器提取所有流并在本地播放
pull rtmp://rtmp3.example.com pageUrl=www.example.com/index.html;
}
application mystaticpull {
live on;
# 在nginx启动时启动静态拉流
pull rtmp://rtmp4.example.com pageUrl=www.example.com/index.html name=mystream static;
}
# 视频点播
application vod {
play /var/flvs;
}
application vod2 {
play /var/mp4s;
}
# 许多发布者,许多订阅者
# 没有查验,没有录制
application videochat {
live on;
#以下通知接收所有的会话变量以及特定的HTTP POST请求中的回调参数
#发出HTTP请求并使用HTTP重新编码来决定是否允许从此连接发布(推流)
on_publish http:/
/localhost:8080/publish;
# play也是与上面相同
on_play http://localhost:8080/play;
# 推流/播放 结束 (在断开连接的重复)
on_done http://localhost:8080/done;
# 上面提到的所有通知都接收标准的connect()参数以及播放/发布参数。
# 如果使用GET样式语法发送了任何参数以进行播放和发布这些也包括在内。
# URL例子:
# rtmp://localhost/myapp/mystream?a=b&c=d
# 每2分钟录制10个视频关键帧(无音频)
record keyframes;
record_path /tmp/vc;
record_max_frames 10;
record_interval 2m;
# 异步通知关于流的录制
on_record_done http://localhost:8080/record_done;
}
# HLS
#为了是HLS正常工作,请创建一个目录名为temfs(这里为:/tmp/hls)
#目录内容通过HTTP提供(可以看配置中的http{}部分)
#传入的流必须为 H264/AAC编码. 对于iPhone,请使用基准H264配置文件(请参阅ffmpeg示例)。
#这个例子为为HLS 从本地movie中创建RTMP流
# ffmpeg -loglevel verbose -re -i movie.avi -vcodec libx264
# -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
# -f flv rtmp://localhost:1935/hls/movie
#如果您需要转码实时流,请使用“ exec”功能。
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
# MPEG-DASH 与HLS相同
application dash {
live on;
dash on;
dash_path /tmp/dash;
}
}
}
# HTTP可以被用来访问RTMP统计资料
http {
server {
listen 8080;
# 该URL以XML提供RTMP统计信息
location /stat {
rtmp_stat all;
# 使用此样式表可在浏览器中将XML作为网页查看
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
#XML样式表以查看RTMP统计信息。将stat.xsl复制到任意位置并将完整的目录路径放在这里
root /path/to/stat.xsl/;
}
location /hls {
# 服务HLS片段
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}
location /dash {
# Serve DASH fragments
root /tmp;
add_header Cache-Control no-cache;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
-
52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185