使用Nginx+ffmpeg搭建直播点播服务器

  • 背景

  最近做一个直播平台项目,调研了一些开源的或者商用的流媒体服务器,包括Live555,Red5,Wowza,ffmpeg,EasyDarwin,FMS等;经过对比考量,因为本次需求相对比较简单,流协议基于RTMP,因此最终决定选型Nginx+ffmpeg。


 

  • 选型

  Nginx + nginx-rtmp-module + ffmpeg

  Nginx本身是一个非常出色的HTTP服务器,ffmpeg也是目前最好用的音视频解决方案,而这两个框架通过一个nginx的模块nginx-rtmp-module组合在一起既可以搭建一个相对完善的流媒体服务器。


 

  • 支持的协议

  RTMP(Adobe公司的协议,主要用在Flash/AIR平台)

  HLS(http live stream  苹果公司的协议)


 

  • 环境

  系统环境:Centos 6.5


 

  • 步骤
  1. 官网下载Nginx最新稳定版本 传送门[http://nginx.org/
  2. 下载nginx-rtmp-module 传送门[https://github.com/arut/nginx-rtmp-module
  3. 编译安装Nginx
    # 创建下载目录
    mkdir /home/download
    
    # 进入目录
    cd /home/download
    
    # 下载Nginx
    wget http://nginx.org/download/nginx-1.12.1.tar.gz
    
    # 下载nginx-rtmp-module
    wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
    
    # 解压
    tar -xvf nginx-1.12.1.tar.gz
    unzip master.zip
    
    # 编译Nginx
    cd nginx-1.12.1
    ./configure --prefix=/usr/local/nginx  --add-module=../nginx-rtmp-module-master  --with-http_ssl_module
    make && make install
    # [!敲黑板]在这里需要重点说一下,有的人也许编码安装不成功,原因是环境依赖问题,可根据具体的错误提示,安装依赖的lib包等,具体就不在这里说了,因为我们重点是流媒体服务器,出错的同学可以参考其他Nginx编译安装的博客。

     

  4. 安装完之后,下一步就是配置nginx.conf文件,下面我贴出自己的配置文件以及重要的配置说明,供大家参考:
     1 #user  nobody;
     2 worker_processes  8;
     3 
     4 #error_log  logs/error.log;
     5 #error_log  logs/error.log  notice;
     6 #error_log  logs/error.log  info;
     7 
     8 #pid        logs/nginx.pid;
     9 
    10 events {
    11     use epoll;
    12     worker_connections  65535;
    13 }
    14 
    15 http {
    16     include       mime.types;
    17     default_type  application/octet-stream;
    18 
    19     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    20     #                  '$status $body_bytes_sent "$http_referer" '
    21     #                  '"$http_user_agent" "$http_x_forwarded_for"';
    22 
    23     #access_log  logs/access.log  main;
    24 
    25     add_header Accept-Ranges bytes;
    26     tcp_nopush         on;
    27     tcp_nodelay on;
    28     sendfile        on;
    29     #tcp_nopush     on;
    30 
    31     #keepalive_timeout  0;
    32     keepalive_timeout  65;
    33 
    34     #gzip  on;
    35 
    36     server {
    37         listen       80;
    38         server_name  localhost;
    39 
    40         #charset koi8-r;
    41 
    42         #access_log  logs/host.access.log  main;
    43 
    44         location / {
    45             root   html;
    46             index  index.html index.htm;
    47         }
    48 
    49 ############  yyqailaopo  start ##############
    50 
    51         #配置nginx拉流服务
    52         location /hls {
    53             types {
    54                 application/vnd.apple.mpegurl m3u8;
    55                 video/mp2t ts;
    56             }
    57             root /yyq/hls/;
    58             add_header Cache-Control no-cache;
    59         }
    60 
    61 ############  yyqailaopo  end   ##############
    62 
    63         error_page   500 502 503 504  /50x.html;
    64         location = /50x.html {
    65             root   html;
    66         }
    67 
    68     }
    69 
    70 ############  yyqailaopo  start ##############
    71 #在http节点下面(也就是文件的尾部)加上rtmp配置:
    72 rtmp {
    73     server {
    74         listen 1935; # rtmp端口
    75         chunk_size 4000;
    76         #开启RTMP直播服务
    77         application live {
    78                 live on; #打开直播
    79                 record off; #关闭录制
    80         }
    81 
    82         #开启hls直播服务
    83         application hls {
    84                 live on; #打开直播
    85                 hls on;
    86                 hls_path /yyq/hls; #切片路径
    87                 hls_fragment 5s; # 切片时间
    88         }
    89         #开启RTMP点播服务
    90         application vod {
    91                 play /Users/yyq; #点播资源
    92         }
    93         application vod_http {
    94                 play http://localhost:80/vod;
    95         }
    96     }
    97 }
    98 ############  yyqailaopo  end   ##############
    View Code

     

  5. 重启nginx,服务器配置就完成了👏
    /usr/local/nginx/sbin/nginx -t
    /usr/local/nginx/sbin/nginx -s reload

     

  6. 现在我们可以使用ffmpeg推送rtmp流到nginx来测试一下
    # 推送多个流
    ffmpeg -re -i /tmp/ffmpeg_test1.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/test1"
    
    ffmpeg -re -i /tmp/ffmpeg_test2.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/test2"

     

  7. 使用vlc播放 rtmp://localhost:1935/live/test1      rtmp://localhost:1935/live/test2 
  8. 现在我们再来使用ffmpeg推送hls流到nginx来测试一下
    ffmpeg -re -i /tmp/ffmpeg_test.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/hls/hlstest"

     

  9. 使用vlc播放 http://localhost/hls/hlstest.m3u8
  10. 点播的资源路径位于/Users/yyq目录下,只要在该目录下放入mp4、flv等视频文件,即可通过下面地址进行资源点播:http://localhost:80/vod/xxx.mp4

👌,打完收工了!希望会对大家有些帮助,如果有问题可以留言,尽量解答~~

 

posted @ 2017-08-16 11:39  YML晨  阅读(4533)  评论(1编辑  收藏