流媒体服务器

准备 RTMP

下载 rtmp

cd /usr/local/src
git clone https://github.com/arut/nginx-rtmp-module.git
cd /usr/local/src/nginx

增加模块

./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module

编译

make
make install

备份 nginx

mv /usr/local/nginx/sbin/nginx{,_`date +%F`}

替换 nginx

cp objs/nginx /usr/local/nginx/sbin

验证

nginx -V

测试

service nginx restart
#排错:systemctl status nginx.service

配置参数 nginx.conf

server 节点内添加

#配置 stat 面板
location /stat {
  rtmp_stat all;
  rtmp_stat_stylesheet stat.xsl;
}
#定义 stat.xsl 路径
location /stat.xsl {
  root /usr/local/src/nginx-rtmp-module;    #路径必须有读取权限
}

#开启 hls,支持 iOS 设备
location /hls {
  types {
    application/vnd.apple.mpegurl m3u8;
    #application/x-mpegURL;
    video/mp2t ts;
  }
  root /data/wwwroot/default/demo;    #流媒体目录
  add_header Cache-Control no-cache;
}

http 节点后添加

rtmp {
  server {
    listen 1935;                #服务端口
    chunk_size 4096;            #数据传输块大小

    #应用列表
    application live{
      live on;                    #推流名称为 live 并打开应用
      hls on;                     #开启 HLS 实时回放功能,和在线播放视频无区别
      hls_path /data/wwwroot/default/demo;    #OBS 推流后存放流媒体目录
      wait_key on;                #保护媒体文件,防止产生擦擦卡卡声音和彩色马赛克
      hls_fragment 10s;           #单个媒体文件时间长度,也许会对卡顿有优化
      hls_playlist_length 60s;    #回看时间范围
      hls_continuous on;          #连续模式
      hls_cleanup on;             #多余媒体清理
    }
  }
}

生效

service nginx restart

防火墙

路径

/etc/iptables.up.rules

增加

-A INPUT -p tcp -m state --state NEW -m tcp --dport 1935 -j ACCEPT

生效

iptables-restore < /etc/iptables.up.rules

OBS 推流

推流 URL:rtmp://localhost/live
流名称:demo

播放测试

RTMP:rtmp://localhost/live/demo
HTTP:http://localhost/demo/demo.m3u8
stat 面板:http://localhost/stat

其它

整体推流到拉流间存在延迟现象严重,这里只是简单搭建一个直播平台。影响延迟因素,涉及主机处理流媒体文件能力,以及 ts 文件串联需要花费大量时间。打开 m3u8 文件会有一些参数可查看。

参数解释

Nginx RTMP 模块 nginx-rtmp-module 指令详解

格式兼容

https://segmentfault.com/a/1190000009121042

评论加载中...