基于Nginx的媒体流服务器

2020-12-13 00:07:14

先进的缓冲技术可将内存分配保持在最低水平,以实现更快的流传输和低内存占用

" dev"分支是所有贡献都将在到达" master"之前被合并的分支。如果您打算提出补丁,请提交到" dev"分支或自己的功能分支。直接提交给" master"不允许。

此NGINX-RTMP模块不支持多人实时直播。尽管可以通过rtmp_auto_push on | off指令启用此功能,但不建议使用此功能,因为它与从1.7.2及更高版本开始的NGINX版本不兼容,因此不应使用它。

rtmp {服务器{听1935; chunk_size 4000; #电视模式:一个发布者,许多订阅者应用程序mytv {#启用实时流直播; #记录流的第一个1K记录全部; record_path / tmp / av; record_max_size 1K; #将当前时间戳附加到每个flv record_unique上; #仅从本地主机发布允许发布127.0.0.1;拒绝发布所有内容; #允许全部播放; }#转码(需要ffmpeg)应用程序大{继续; #在每个已发布的流上运行以下命令(ffmpeg)#替换为:$ app / $ {app},$ name / $ {name}用于应用程序&流名称。 ##此ffmpeg调用从该应用程序接收流& #将分辨率降低到32x32。流已发布到#' small'相同名称的应用程序(见下文)。 ##ffmpeg可以对流执行任何操作,例如视频/音频#代码转换,调整大小,更改容器/编解码器参数等##可以指定多个exec行。 exec ffmpeg -re -i rtmp:// localhost:1935 / $ app / $ name -vcodec flv -acodec copy -s 32x32 -f flv rtmp:// localhost:1935 / small / $ {name}; }应用小{继续; #分辨率降低的视频来自ffmpeg}应用程序网络摄像头{直播; #来自本地网络摄像头的流exec_static ffmpeg -f video4linux2 -i / dev / video0 -c:v libx264 -an -f flv rtmp:// localhost:1935 / webcam / mystream; }应用程序mypush {继续; #在这里发布的每个流#自动推送到#这两台机器都推送rtmp1.example.com;推送rtmp2.example.com:1934; }应用程序mypull {继续; #从远程计算机中提取所有流#并在本地播放拉rtmp://rtmp3.example.com pageUrl = www.example.com / index.html; }应用程序mystaticpull {继续; #从nginx开始拉动开始静态拉动rtmp://rtmp4.example.com pageUrl = www.example.com / index.html name = mystream static; }#视频点播应用程序vod {播放/ var / flvs; }应用vod2 {播放/ var / mp4s; }#许多发布者,许多订阅者#没有支票,没有录制应用程序视频聊天{继续; #以下通知接收所有#会话变量以及#HTTP POST中的特定调用参数#请求#进行HTTP请求&使用HTTP retcode#决定是否允许通过此连接发布#on_publish http:// localhost:8080 / publish; #与播放on_play http:// localhost:8080 / play相同; #发布/播放结束(断开连接时重复)on_done http:// localhost:8080 / done; #上面提到的所有通知都接收#标准的connect()参数以及#播放/发布参数。如果发送了任何参数,则使用GET样式语法#发布#这些也包括在内。 #示例网址:#rtmp:// localhost / myapp / mystream?a = b& c = d#每2分钟记录10个视频关键帧(无音频);每2分钟记录一次关键帧; record_path / tmp / vc; record_max_frames 10; record_interval 2m; #异步通知记录在fl_on_record_done http:// localhost:8080 / record_done上的flv; }#HLS#为使HLS正常工作,请在tmpfs中创建一个目录(此处为/ tmp / hls)。目录内容通过HTTP提供(请参阅config中的#http {}部分)##传入流必须位于H264 / AAC中。对于iPhone,请使用基线H264#配置文件(请参阅ffmpeg示例)。 #此示例从可用于HLS的电影创建RTMP流:##ffmpeg -loglevel详细-re -i movie.avi -vcodec libx264#-vprofile基线-acodec libmp3lame -ar 44100 -ac 1#-f flv rtmp:// localhost :1935 / hls / movie##如果您需要转码实时流,请使用' exec'特征。 #application hls {继续; hls; hls_path / tmp / hls; }#MPEG-DASH类似于HLS应用程序dash {live on;冲刺dash_path / tmp / dash; #HTTP可用于访问RTMP统计信息http {服务器{监听8080; #该URL在XML位置/ stat {rtmp_stat all; #使用此样式表在浏览器rtmp_stat_stylesheet stat.xsl中将XML作为网页查看。 } location /stat.xsl {#XML样式表,用于查看RTMP统计信息。 #将stat.xsl复制到任意位置#并将完整目录路径放在此处root /path/to/stat.xsl/; } location / hls {#服务HLS片段类型{application / vnd.apple.mpegurl m3u8; video / mp2t ts; } root / tmp; add_header缓存控制无缓存; } location / dash {#提供DASH片段根目录/ tmp; add_header缓存控制无缓存; }}}