nginx搭建流媒体服务器,实现点播,直播

系统版本centos7系统

#安装必要组件
    yum install gcc  pcre-devel openssl-devel zlib
    如果NGINX要支持正则表达式,需要PCRE库。
    如果NGINX要支持加密访问,需要OpenSSL库。
    如果NGINX要支持压缩,需要zlib库。

#下载,解压,重命名nginx和nginx-http-flv-module模块
    wget http://nginx.org/download/nginx-1.16.1.tar.gz
    wget https://github.com/winshining/nginx-http-flv-module/archive/v1.2.7.tar.gz

第一:以动态模块的方式编译安装nginx

#加载nginx-http-flv-module 模块编译安装nginx
    mkdir /app/nginx -p
    cd /root/nginx
    ./configure --prefix=/app/nginx --add-dynamic-module=/root/nginx-http-flv-module
    make
    make install
#修改nginx配置文件
    rm -f /app/nginx/conf/nginx.conf.default

    vi /app/nginx/conf/nginx.conf

user  nginx;
worker_processes  1;
#在events前面添加http-flv动态模块
load_module /app/nginx/modules/ngx_http_flv_live_module.so;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;
    server {
        listen      80;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /hls {
#不能开启 flv_live ,开启后 一般的推流将失效
#            flv_live on;
            root /video; 
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            add_header Cache-Control no-cache;
            add_header Access-Control-Allow-Origin *;
     }
    }
#这里配置http的点播配置参数
    server {
        listen       8081;
        charset utf-8;
        location ~ \.mp4$ {
            root   /video/vod;
        limit_rate_after 10m;
        limit_rate 500k;
        }
        location ~ \.m4v$ {
            root   /video/vod;
        }
        location ~ \.flv$ {
            root   /video/vod;
        }
   }
}
#下面是rtmp推流设置
rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
#rtmp_socket_dir /video;
rtmp {
    out_queue           4096;
    out_cork            8;
    max_streams         128;
    timeout             15s;
    drop_idle_publisher 15s;
    #log_interval 30s;
    #log_size     1m;
    server {
        listen 1935;
        chunk_size 4096; 
        application hls {
            live on; 
            hls on;  
        gop_cache on;
        wait_key on; 
            hls_path /video/hls;
        hls_fragment 5s;
        hls_playlist_length 60s;
        hls_continuous on;
        hls_cleanup on;
        }
        application dianbo {
            play /video/vod;
        }
    }
} 

第二:为web播放MP4创建播放器

    rm /app/nginx/html/index.html -rf
    cd /app/nginx/html/
    wget https://qiniu.wsfnk.com/index-play.html
    mv index-play.html index.html

第三:将MP4文件上传至服务器/video/vod目录下

    chmod -R 777 /video/vod

第四:各种客户端,推流,拉流地址(注意这样的直播推流,差不多存在两分钟的延迟)

    http://13.16.37.9/hls/home.m3u8
    rtmp://13.16.37.9/dianbo/1.mp4      #vlc客户端拉流地址
    http://13.16.37.9:8081/2.mp4        #网页播放/vlc都可以,用http协议可以快进
    #下图是推流地址

附nginx配置文件讲解及 公共的RTMP源

#公共源
1,RTMP协议直播源
香港卫视:rtmp://live.hkstv.hk.lxdns.com/live/hks

2,RTSP协议直播源
珠海过澳门大厅摄像头监控:rtsp://218.204.223.237:554/live/1/66251FC11353191F/e7ooqwcfbqjoo80j.sdp
大熊兔(点播):rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov

3,HTTP协议直播源
香港卫视:http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8
CCTV1高清:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
CCTV3高清:http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8
CCTV5高清:http://ivi.bupt.edu.cn/hls/cctv5hd.m3u8
CCTV5+高清:http://ivi.bupt.edu.cn/hls/cctv5phd.m3u8
CCTV6高清:http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8
苹果提供的测试源(点播):http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear2/prog_index.m3u8

nginx配置文件讲解

# HTTP 相关网络请求配置
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    gzip  on;
    #用于视频直播服务先关的http 解析服务
    server {
        listen      80;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        location /stat.xsl {
            root /usr/local/nginx/modules/; #specify in where stat.xsl located
        }
        location /hls {
            #flv_live on; #打开HTTP播放FLV直播流功能,这个功能谨慎打开,还需要部分参数
            root /video; 
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            add_header Cache-Control no-cache;
            add_header Access-Control-Allow-Origin *;
     }
    }

    server {
        listen       8081;
        charset utf-8;
        location ~ \.mp4$ {
            root   /video/;
        limit_rate_after 10m;               #---------下载10m后再限速 
        limit_rate 500k;                    #----------限速500k 
        }

        location ~ \.m4v$ {
            root   /video/;
        }

        location ~ \.flv$ {
            root   /video/;
        }

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl
    {
            root /usr/local/nginx/modules/;
    }
   }
}

rtmp_auto_push on;           #因为Nginx可能开启多个子进程,这个选项表示推流时,媒体流会发布到多个子进程
rtmp_auto_push_reconnect 1s;
#rtmp_socket_dir /video;      #多个子进程情况下,推流时,最开始只有一个子进程在竞争中接收到数据,然后它再relay给其他子进程,他们之间通过unix domain socket传输数据,这个选项表示unix domain socket的路径
rtmp {
    out_queue           4096;
    out_cork            8;
    max_streams         128;
    timeout             15s;
    drop_idle_publisher 15s;
    log_interval 30s; #log模块在access.log中记录日志的间隔时间,对调试非常有用
    log_size     1m; #log模块用来记录日志的缓冲区大小

    # 用于是直播的服务 1935端口 推送地址:rtmp://39xxxxxxx.120:1935/hls  获取地址:http://live.xxxxxxxx.com/hls/222.m3u8
    server {
        listen 1935;
        chunk_size 4096;  #块大小

        #电视模式
        #application mytv {          
        #    live on;   #enable live streaming
        #    record all;
        #    record_path /tmp/av;
        #    record_max_size 1K;
        #    record_unique on;
        #    #publish only from localhost
        #    allow publish 127.0.0.1;
        #    deny publish all;
        #    #allow play all;
        #}

        #hls配置,#应用/实例的三种类型(1)rtmp录播(vod),(2)rtmp直播(live),(3)hls直播(hls)
        application hls {
            live on;  #开启直播直播模式,一对多广播
            hls on;   #开启直播,这个参数把直播服务器改造成实时回放服务器
        gop_cache on;
        wait_key on; #对视频切片进行保护,这样就不会产生马赛克了
        hls_path /hls;  #切片视频文件存放位置
        hls_fragment 20s;  #默认是5秒。只能为整数,#每个视频切片的时长
        #hls_playlist_length 60s;  #总共可以回看的事件,这里设置的是1分钟
        hls_continuous on; #连续模式
        hls_cleanup on;    #对多余的切片进行删除
            #allow play all;
        }

    #rtmp点播模式,mp4和flv就存在本地的video中,rtmp地址为: rtmp://xxxx/dianbo/1.mp4
        application dianbo {
            play /video;
        }

    #点播,本地没有视频,需要去远端拉取过来,带缓存功能,缓存地址为play_temp_path,
    #application cctv {
    #    play_temp_path /video;
    #    #play_local_path /video;
    #    play http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8;
        #    pull rtmp://live.hkstv.hk.lxdns.com/live/hks; #如果懒得推流,那可以用这个,香港卫视的直播推流
    #}
    }
} 
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/982.html
微信打赏微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2020/2/19作者: 辣条①号

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注