Py学习  »  NGINX

Nginx-rtmp翻译

Bear211318 • 4 年前 • 900 次点击  

特点

  • 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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52208
 
900 次点击