美文网首页
centos 搭建SRS 流媒体服务

centos 搭建SRS 流媒体服务

作者: 云龙789 | 来源:发表于2019-04-25 18:04 被阅读0次

    服务器前期准备

    • 系统要求
      操作系统 centos7.0以上64位
    • 生成软件包信息缓存
    yum makecache
    
    • 安装更新
    yum update -y
    
    • 安装必要软件
    yum install -y zip  unzip  wget curl git vim zsh nano screen
    
    • 安装 oh my zsh (有助于不全和选择目录)
    sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
    

    下载安装

    • 将 srs 安装到目录 /usr cd /usr
    • 下载软件包并进入目录 trunk
    git clone https://github.com/ossrs/srs && cd srs/trunk
    
    • 编译
    ./configure  && make
    

    启动 srs

    ./objs/srs -c conf/srs.conf
    

    开放端口

    • 以下端口不在开放端口行列,则需要开放
      8080
      1935
    

    3:生成 /etc/sysconfig/iptables

    iptables -P INPUT ACCEPT

    4:执行开放端口命令

    /sbin/iptables -I INPUT -p tcp --dport 1935 -j ACCEPT

    5:保存

    iptables-save > /etc/sysconfig/iptables

    srs 最好每隔一段时间重启一次,我写了计划任务是每周二,周五7点重启。但是注意,如果你使用的是 hls 模式,则需要手动重启
    crontab 定时任务资料

    conntab -e
    * 7 * * 2,5  cd /usr/srs/trunk  && ./etc/init.d/srs restart  > /dev/null 2>&1
    

    手动重启

    • 1.检查 srs 对应的端口 并关闭
    ps -ef|grep srs
    
    • 2.关闭 srs 端口
    kill -9 端口号
    
    • 3.进入srs 项目根目录
    cd  /usr/srs/trunk
    
      1. 重启srs 服务
    ./objs/srs -c ./conf/http.hls.conf 
    

    github-srs指令链接

    指令一定要切换到 /usr/srs/trunk 目录下,才能执行.

    ./etc/init.d/srs {start|stop|status|restart|reload} 开始,停止,状态,重启,重置
    

    在重启之后,最好执行 ./etc/init.d/srs status,如果显示 SRS(pid 14203) is running. 则表示启动成功,而不要只仅仅靠 ps -ef |grep srs 来判断服务是否开启

    查看进程使用情况 htop指令

    • 查看centos 版本
    cat /etc/redhat-release  // 执行后看到使用的是 7.5.1804
    
    • 安装
    # CentOS6
    rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
    yum install htop -y
    
    # CentOS7
    yum install epel-release -y
    yum install htop -y
    
    • 使用

    直接执行 htop 即可

    流媒体配置文件

    流媒体推送是首先生成一个多少秒(hls_fragment)的文件包,这个文件包成为一个切片,然后推送出去。这个包越小,越会较少网络的性能,也就越容易推送。当一个流推送出去后,我们就可以把他删除,不然会生成太多的切片文件,耗费服务器性能。(hls_window)参数就是指,当前时间多少秒以前的数据文件都要删除。
    hls_path 是指流媒体文件生成后存放的文件夹地址

    配置文件地址 /usr/srs/trunk/conf/http.hls.conf

    vhost __defaultVhost__ {
        hls {
            enabled         on;
            hls_fragment    3; // 切片时间段,3秒种一段(一段文件就是三秒中的播放长度),段越小,越流畅,但数据会产生的更多.但是网络也是有延迟的,我个人尝试,感觉这个是配置 5  hls_window 配置 25 会比较好
            hls_window      9; // 缓存总长度(最多缓存多长时间)
            hls_path        ./objs/nginx/html;
            hls_m3u8_file   [app]/[stream].m3u8;
            hls_ts_file     [app]/[stream]-[seq].ts;
        }
        forward 1.1.1.1:1935;
    }
    
    • 参数理解
    1. hls_fragment
     the hls fragment in seconds, the duration of a piece of ts.
     指定ts切片的最小长度。 比如 demo 就是 3s,但实际值可能是大于3s的
    
    2.hls_window:秒,指定HLS窗口大小,即m3u8中ts文件的时长之和,超过总时长后,丢弃第一个m3u8中的第一个切片,直到ts的总时长在这个配置项范围之内。即SRS保证下面的公式: hls_window >= sum(m3u8中每个ts的时长)
    # the hls window in seconds, the number of ts in m3u8.
    
    3.hls_path: HLS的m3u8和ts文件保存的路径。SRS会自动加上app和stream名称。比如
    
        对于RTMP流:rtmp://localhost/live/livestream
        HLS配置路径:hls_path        /data/nginx/html;
        那么会生成以下文件:
        /data/nginx/html/live/livestream.m3u8
        /data/nginx/html/live/livestream-0.ts
        /data/nginx/html/live/livestream-1.ts
        /data/nginx/html/live/livestream-2.ts
        最后的HLS地址为:http://localhost/live/livestream.m3u8
    
    4.hls_m3u8_file: HLS的m3u8文件名
    
    5.hls_ts_file: HLS的ts文件名
    
    

    HLS Introduction

    HLS是提供一个m3u8地址,Apple的Safari浏览器直接就能打开m3u8地址,譬如:

    http://demo.srs.com/live/livestream.m3u8
    

    Android不能直接打开,需要使用html5的video标签,然后在浏览器中打开这个页面即可,譬如:

    <!-- livestream.html -->
    <video width="640" height="360"
            autoplay controls autobuffer 
            src="http://demo.srs.com/live/livestream.m3u8"
            type="application/vnd.apple.mpegurl">
    </video>
    

    HLS的m3u8,是一个ts的列表,也就是告诉浏览器可以播放这些ts文件,譬如:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-MEDIA-SEQUENCE:64
    #EXT-X-TARGETDURATION:12
    #EXTINF:11.550
    livestream-64.ts
    #EXTINF:5.250
    livestream-65.ts
    #EXTINF:7.700
    livestream-66.ts
    #EXTINF:6.850
    livestream-67.ts
    

    推流到指定的服务器

     forward 1.1.1.1:1935; // 端口并不是一定要使用1935,也可以使用其他端口,服务器是其他搭建流媒体的服务器
     这个地址是技能接收流,又能推送流。推送并不是说主动推送的情况,而是说访问这个端口可以得到数据
     如果药推送到多个服务器,直接再 ip 后面留个空格,继续写即可。
     demo forward  192.168.1.6:1935 192.168.1.6:1936 192.168.1.7:1935 192.168.1.7:1936;
    

    软件直播推流

    必备软件

    OBS Studio: 直播软件
    VLC media player,可以播放任何格式的视频

    OBS Studio 的使用

    OBS-Studio版本的使用教程

    在播放期间, 的设置是不能改变的,必须先停止播放。
    服务器地址流密匙 是在个人中心的直播页面生成的

    • 手机端的直接在手机上做直播即可

    视频居中处理

    选中视频,点击右键,选择 交换(T)-> 比例适配屏幕(F)

    来源

    VLC视频源 - 这个可以选择一个文件夹,但是 媒体源是只可以选择一个文件的

    流数据的填写 (值来自于直播页面中,登录账号后,进入我的直播)

    服务:选择自定义
    服务器:FMSURL 的值
    串流密钥: Flow mark 的值
    

    我的直播页面数据

    FMSURL: rtmp://1.1.1.1:1935/live   流->服务器的地址
    Flow mark: 25791_1558006219               流->流密钥的地址
    

    当直播开始后,我的直播页面不要刷新,否则密钥流地址会变化,导致视频播放失败

    一切准备就绪后,1.在我的视频页面点击 OBS直播,会提示直播成功。这个页面不能关闭,否则会导致流密钥无效;
    2.OBS软件点击 开始推流


    检查网速

    • 安装 speedtest
    $ cd /usr/tmp   
    $ wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
    $ chmod a+rx speedtest.py
    $ mv speedtest.py /usr/local/bin/speedtest
    $ chown root:root /usr/local/bin/speedtest
    
    • 执行命令检查网速
    $ speedtest
    

    查看网络使用情况 -- iftop 指令

    • 安装 iftop
     yum -y install iftop 
    
    • 使用
    iftop
    

    推流和拉流

    推   1.1.1.1:1935
    拉   http://1.1.1.1:8080
    
    播放地址   http://x.x.x.x:8080/sdf/yyyyy.m3u8
    推流地址  http://x.x.x.x:1935/sdf/yyyyy
    或者   rtmp://x.x.x.x:1935/sdf/yyyyy
    yyyyy 就相当于具体某个视频  保持一致 就可以看到视频
    推流用1935端口,看视频用8080
    

    相关文章

      网友评论

          本文标题:centos 搭建SRS 流媒体服务

          本文链接:https://www.haomeiwen.com/subject/tezzgqtx.html