SRS+Nginx+Ubuntu16.4搭建流媒体服务器

  • 学习内容
  1. 使用SRS手动搭建流媒体服务器。
  2. SRS相关优化配。
  3. Nginx安装及相关SRS配置
  4. rtmp 推流,http拉流
  5. 优秀SRS相关博客推荐
  • 使用SRS手动搭建流媒体服务器
    第一步: 下载开源srs流媒体服务器,在本地任意目录下分别执行以下命令,此过程需要等待很久,或者前往该库自行下载解压到本地任意目录下。
git clone https://github.com/ossrs/srs

修改默认配置文件,并进行安装。

vim srs/trunk/conf/srs.conf
修改max_connections    1000;为max_connections     100;
注意:若不修改此值后面编译中会报错
cd srs/trunk
./configure --osx
注意:在mac 系统中./configure 时需要添加  --osx
make

等待安装完毕即可。
第二步:修改配置文件,启动流媒体服务器

修改配置:
> vim srs/trunk/conf/hls.conf

vim srs/trunk/conf/hls.conf
修改hls_path的路径,默认路径为./objs/nginx/html,这里修改为/root/ossrs/hls_path(自定义)。

通过nginx配置访问/root/ossrs/hls_path

hls_path的作用:直播中会将m3u8文件和ts文件输出hls_path,有了m3u8文件就可以在启动端播放了。
m3u8是一个包含许多ts视频路径和格式说明集合的文本文件,ts是一种视频格式,是直播中一个小的视频切片。

m3u8播放地址为:http://47.98.37.74/live/livestream.m3u8,
47.98.37.74为服务器ip,80为tomcat服务器端口,live为虚拟路径可随意自定义SRS会/root/ossrs/hls_path下自动创建,livestream为自定义m3u8文件名

对于web服务器而言livestream.m3u8只是一个文件,我们将hls_path设置到web服务器能够访问到即可。

启动srs服务器

./objs/srs -c conf/hls.conf
  • SRS相关优化配

vim srs/trunk/conf/hls.conf

listen              1935;
max_connections     1000;

http_server {
#是否启用HTTP流媒体服务,http_server必须存在 ,1935端口需要配置防火墙放行
    enabled         off;
#    listen          80;
#    dir             /root/ossrs/hls_path;
}

vhost __defaultVhost__ {
    #最小延迟打开,默认是打开的,该选项打开的时候,mr默认关闭。
    min_latency     on;

    #Merged-Read,针对RTMP协议,为了提高性能,SRS对于上行的read使用merged-read,即SRS在读写时一次读取N毫秒的数据
    mr {
        enabled     off;
        #默认350ms,范围[300-2000]
        #latency     350;
    }

    #Merged-Write,SRS永远使用Merged-Write,即一次发送N毫秒的包给客户端。这个算法可以将RTMP下行的效率提升5倍左右,范围[350-1800]
    mw_latency      100;
    #enabled         on;
    #https://github.com/simple-rtmp-server/srs/wiki/v2_CN_LowLatency#gop-cache
    gop_cache       off;
    #配置直播队列的长度,服务器会将数据放在直播队列中,如果超过这个长度就清空到最后一个I帧
    #https://github.com/simple-rtmp-server/srs/wiki/v2_CN_LowLatency#%E7%B4%AF%E7%A7%AF%E5%BB%B6%E8%BF%9F
    #queue_length    10;

    #http_flv配置
    http_remux {
        enabled     on;
        mount [vhost]/[app]/[stream].flv;
        hstrs   on;
    }

    hls {
        enabled         on;
        hls_path        /root/ossrs/hls_path;
        hls_fragment    10;
        hls_window      60;
    }
}

相关优秀SRS博客推荐
SRS 直播系统使用中发现延迟过大
HLS协议解析(特优质文章)
关于SRS3配置文件详细参数说明(特优质文章)

  • Nginx安装及相关SRS配置
    nginx安装

更新

apt-get update

安装nginx

apt-get install nginx

Ubuntu安装之后的文件结构大致为:

  1. 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-enabled下
  2. 程序文件在/usr/sbin/nginx
  3. 日志放在了/var/log/nginx中
  4. 并已经在/etc/init.d/下创建了启动脚本nginx
  5. 默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-enabled里的配置)

启动重载

nginx -s reload

nginx相关配置文件修改

修改nginx.conf配置文件,优化配置

vim /etc/nginx/nginx.conf
# user默认www改为root,否者nginx无权限访问/root目录下资源文件
user root;
# no of cpu * 2
worker_processes 4;
worker_rlimit_nofile 25000;
pid /run/nginx.pid;

events {
        use epoll;
        #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
        worker_connections 20000;
        multi_accept on;
}

http {

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
        #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;

        #连接超时时间
        keepalive_requests 100;
        #keepalive_timeout 65;
        keepalive_timeout 0;

        types_hash_max_size 2048;
        open_file_cache max=100;

        #设定请求缓冲
        server_names_hash_bucket_size  128;
        client_header_buffer_size   32K;
        large_client_header_buffers  4 32k;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        #开启gzip压缩,降低传输流量
        gzip  on;
        gzip_min_length    1k;
        gzip_buffers    4 16k;
        gzip_http_version  1.1;
        gzip_comp_level  2;
        gzip_types  text/plain application/x-javascript text/css  application/xml;
        gzip_vary on;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

nginx请求优化文章推荐
如何优化NGINX以处理每分钟100K+请求(10万/min)
Nginx高并发配置思路(轻松应对1万并发量)

将 /etc/nginx/sites-enabled/ 下默认文件重命名为http并编辑

server {
    listen 80;
    server_name www.xypsp.com;

    location ~* \.m3u8{
       root /root/ossrs/hls_path;
       add_header Access-Control-Allow-Origin *;
    }

    location ~* \.ts{
       root /root/ossrs/hls_path;
       add_header Access-Control-Allow-Origin *;
    }

}

注意 root 为SRS中配置的hls_path路径/root/ossrs/hls_path

nginx -s reload
  • rtmp 推流,http拉流

推流地址为: rtmp://47.98.37.74:1935/live/4K.m3u
拉流地址为:
http://www.xypsp.com/live/4K.m3u8
或者通过服务器ip
http://47.98.37.74/live/4K.m3u8
live/4K.m3u8 皆为自定义SRS自动创建

你可能感兴趣的:(SRS+Nginx+Ubuntu16.4搭建流媒体服务器)