使用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   ##############

  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

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

时间: 2024-10-24 11:14:55

使用Nginx+ffmpeg搭建直播点播服务器的相关文章

nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器

本文概要: nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择.本文介绍了一种简易方法快速搭建rtmp流媒体服务器,也叫rtsp转播,数据源不是读取文件,而是采用获取rtspNal流后使用ffmpeg转播.csdn固本培元:[email protected] 开发环境:centos6.4 (主流的linux服务器选择,30%以上的市场占有率) 需要这几个包. 版本号:nginx 1.7.3  openssl 1.0.2   rtmp-module(版本未知)

keepalived+nginx+tomcat搭建高性能web服务器集群

使用keepalived+nginx+tomcat搭建高性能web服务器集群,系统采用centos6.9,前端用nginx做反向代理实现负载均衡,同时结合keepalived对nginx实现高可用,后端使用两台tomcat做动态jsp解析,实现了动静分离. 搭建环境 准备四台服务器 vip: 192.168.75.130master: 192.168.75.131 (安装nginx做反向代理实现负载匀衡,结合keepalived实现高可用)backup: 192.168.75.132 (同上)w

利用nginx的搭建直播流媒体平台

演示环境 centos 7 nginx-1.8.1 nginx-rtmp-module obs studio vlc media player 搭建nginx-rtmp直播服务器-OBS录制推流-VLC视频流播放 首先编译安装nginx [[email protected] ~]# tar xvf nginx-1.8.1.tar.gz [[email protected] ~]# unzip nginx-rtmp-module-master.zip [[email protected] ~]#

使用Nginx+FFMPEG搭建HLS直播转码服务器

目的:使Nginx支持Rtmp协议推流,并支持hls分发功能及FFMPEG转码多码率功能. 一.准备工作 模块:nginx-rtmp-module-master(支持rtmp协议) 下载地址: http://nginx.org https://github.com/arut/nginx-rtmp-module 1.安装依赖包: #yum -y install gcc glibc glibc-devel make nasm pkgconfig lib-devel openssl-devel exp

使用Nginx+FFMPEG搭建HLS直播服务器

 目的:使Nginx支持Rtmp协议推流,并支持hls分发功能 一.准备工作 模块:nginx-rtmp-module-master(支持rtmp协议) 下载地址: http://nginx.org https://github.com/arut/nginx-rtmp-module 1.安装依赖包: #yum -y install gcc glibc glibc-devel make nasm pkgconfig lib-devel openssl-devel expat-devel get

nginx搭建直播缓存服务器

线上只有一台直播服务器,现在是商务打算给另外一个公司直播,一台服务器带宽不能满足,业务,总监,运维(我自己)沟通明确了需求,再上线3台放在前端用做缓存ts后缀的视频文件. 业务明确了,技术问题只能自己搞定,之前用的squid 加上新版性能不行,而且配置繁琐,我自己都一年多没配置,好多都忘记了,重新学也的花费不少时间,最后打算用自己熟悉的nginx做. 我以前做nginx缓存是挂的perl代码,强制缓存各大视频网站内容,没有定期失效删除这种功能.现在这个直播业务需要设置缓存时间,业务给的时间有限,

Windows使用Nginx+ffmpeg搭建RTMP服务器

简介Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.nginx-rmtp-module是Nginx服务器的流媒体插件.nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流.1. 下载ffmpeg的Windows静态版,并解压.2. 下载nginx-rtmp-windows版并解压.3. 双击nginx.exe.4. 浏览器打开http://localhost:80

SRS(simple-rtmp-server)直播点播服务器【官方已跪】

前言: 由于个人工作的原因,公司采用了这个作为点播直播服务器,采用这个的原因只有一个,因为开源免费因为不要钱!因为不要钱!因为不要钱!因为很重要所以说三遍.如果不是这个原因,我也不会对此开源软件相识,作为创业公司当然是能省就省,买不起商业的点播直播软件,没人力做不了一个点播直播软件已经用过大半年,各方面使用的情况来看还挺可以的,今日趁我写博客的激情还在遂再写一篇. #本人的博客尽可能的多注释,注释不是给我看的,我都懂!没错,就是给不会的现在在看我的博客小白们看的!如果发现还有不懂的地方请留言哪里

nginx上搭建HLS流媒体服务器

http://blog.csdn.net/cjsafty/article/details/7922849 简介:HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议. 是苹果公司QuickTime X和iPhone软件系统的一部分.它的工作原理是把整个流分成一个个小的基于HTTP 的文件来下载,每次只下载一些.当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速 率下载同样的资源,允许流媒体会话适应不同的数据速率.在开始一个