zoukankan      html  css  js  c++  java
  • crtmpserver组网部署方案

    转自:http://blog.chinaunix.net/uid-26000296-id-4273867.html

    一、简介

    流媒体网站的服务器主要分为两个部分:流服务 与 web服务。
    流服务器使用常crtmpserver作为原型,为主播提供推流服务,为用户提供拉流服务。
    流服务分为源管理节点(SM),源节点(SP)以及边缘节点(EP)。三种类型的节点为层级关系。

    一般主播通过dns获取源节点的ip,向源服务器推流。源服务器收到主播流之后,向源管理上报该主播的流信息(每个主播有唯一的id号)。
    用户从边缘节点拉流,边缘节点向所设定的唯一上级源服务器拉取某个流编号的数据。
    源节点通过与源管理节点通信之后,确定该流id的来源,源节点取得主播推流的源服务器ip后,直接与该源节点通信,拉取流。
    每个边缘节点如上所述,有一个固定的上游源节点。源节点之间是互相拉取的关系。

    二、crtmpserver的通讯结构

    三、crtmpserver的部署及启动方式

    1、部署

    目前使用rsync源作为程序包管理服务器。crtmpserver 目录结构目前为
    |– etc
    |   `– crtmpserver.lua.sample
    |– lib
    |   `– crtmpserver
    |       |– applications
    |       |   |– SourceManagerClient
    |       |   |   `– libSourceManagerClient.so
    |       |   |– SourceManagerServer
    |       |   |   `– libSourceManagerServer.so
    |       |   |– admin
    |       |   |   `– libadmin.so
    |       |   |– applestreamingclient
    |       |   |   `– libapplestreamingclient.so
    |       |   |– appselector
    |       |   |   `– libappselector.so
    |       |   |– flvplayback
    |       |   |   `– libflvplayback.so
    |       |   |– proxypublish
    |       |   |   `– libproxypublish.so
    |       |   |– samplefactory
    |       |   |   `– libsamplefactory.so
    |       |   |– stresstest
    |       |   |   `– libstresstest.so
    |       |   `– vptests
    |       |       `– libvptests.so
    |       |– libcommon.so
    |       |– liblua.so
    |       |– libthelib.so
    |       `– libtinyxml.so
    |– man
    |   `– man1
    |       `– crtmpserver.1
    |– sbin
    |   `– crtmpserver
    `– script
    |– CRTMPServerEP.lua
    |– CRTMPServerSM.lua
    |– CRTMPServerSP.lua
    |– checkcrtmpserver.sh
    |– install.sh
    |– restart.sh
    |– start.sh
    `– update.sh

    2、 使用install.sh 进行安装

    当然首先你得先获取install.sh,此脚本会调用start.sh 把进程配置起来。
      a、安装SM: sh install.sh SM
      b、安装SP:    sh install.sh SP $SM_ip (请替换为源管理的ip)
      c、安装EP:    sh install.sh EP $SP_ip(请替换为指定的上级的ip,尽量使用同运营商资源)


    3、 使用update.sh 进行版本更新

      a、 sh update.sh (可以在线更新,因为程序运行时已经完全载入内存)
      b、sh restart.sh (更新或者使用新的配置文件时需要重启服务器,此时所有的用户连接会直接关闭)


    4、使用checkcrtmpserver.sh 进行自动拉起

      a、 在update.sh 中有 
         nohup /bin/sh /usr/local/crtmpserver/script/checkcrtmpserver.sh > /usr/local/crtmpserver/script/checkcrtmp.log  2>&1 & 
         的命令进行自动拉起,检查间隔为5s,判断是否拉起的标准为进程个数是否为7个进程。(包括1个主进程和6个子进程)。


    5、启动方式

    sed -i ‘/crtmpserver/d’ /etc/ld.so.conf
    echo “/usr/local/crtmpserver/lib/crtmpserver/” >> /etc/ld.so.conf
    ldconfig
    #以上为避免crtmpserver启动所依赖的库没有。
    cd /usr/local/crtmpserver/lib/crtmpserver #一定要进到这个目录,然后用绝对路径把进程起起来。
    /usr/local/crtmpserver/sbin/crtmpserver /usr/local/crtmpserver/etc/$conf


    四、目前使用的节点情况以及监控注意事项

    1、目前使用的节点共39台服务器,其中源节点5台,边缘节点34台。
    2、监控时需要注意进程个数是否小于7,更倚重的是网络质量。
    3、观众流接收数和流失败率是需要监控的两个指标,目前由网页上的客户端上报。


    五、常见问题排查

    1、主播播放不了

      a、首先查看主播是dns到哪个源上,可以直接用(nslookup 流地址)或者 (ping 流地址)查看,如果解析错误,则反馈…
      b、判断主播是否能够正常连接上源节点。(telnet 流地址:端口)与 (telnet 流地址:端口)尝试,如果不行,则检查是否是否被本机软件禁用
      c、看是否360禁用掉端口,是则打开。

    2、主播播放卡

      a、主播网速测试,上传带宽必须到达40kB至少才能保持通畅。
      b、tracert -d  流地址 看路由。
      c、ping 流地址 看耗时
      d、如果有mtr工具,则看是哪一跳丢包。

    3、观众播放卡

    原因同上。
    4、进程异常,请在ps aux | grep crtmpserver  之后,直接restart进程,避免长时间不服务。
    5、新节点启用之前请测试,必须加到token服务器的ip列表中才可以。
     
    以上用到的install.sh脚本为:
    #!/bin/sh
    #rsync new version crtmp to folder
    #choose sever type
    #copy server type config to etc
    #change ip & upstream ( just for ep )
    #add new server ip to sm
    #run update.sh for other install shell
    #run start.sh to startup crtmpserver

    #rsync -avz --delete rsync://网址:端口/crtmpserver /usr/local/crtmpserver/
    LOCALIP=`ip r | grep src| grep eth0 |awk '{print $NF}'`
    if [ -d /data1 ];then
    dirpre=/data1
    elif [ -d /data01 ];then
    dirpre=/data01
    else
    dirpre=/data1/
    fi
    LOGDIR=${dirpre}/crtmpserver/logs
    MEDIADIR=${dirpre}/crtmpserver
    install_crtmp(){
            rsync -avz --delete rsync://网址:端口/crtmpserver /usr/local/crtmpserver/
            mkdir -p ${LOGDIR}
            mkdir -p ${MEDIADIR}
    }
    install_SM(){
            mkdir -p ${LOGDIR}smlog/
            cd /usr/local/crtmpserver/etc/
            cp /usr/local/crtmpserver/script/CRTMPServerSM.lua .
            echo "modify the configure file~"
            #sh /usr/local/crtmpserver/script/start.sh
    }
    install_SP(){
            cd /usr/local/crtmpserver/etc/
    SOURCEMANAGERIP=$1
            cp /usr/local/crtmpserver/script/CRTMPServerSP.lua .
            sed "s/LOCALIP/${LOCALIP}/g" -i  /usr/local/crtmpserver/etc/CRTMPServerSP.lua
            sed "s/SOURCEMANAGERIP/${SOURCEMANAGERIP}/g" -i  /usr/local/crtmpserver/etc/CRTMPServerSP.lua
    sed "s/LOGDIR/${LOGDIR}/g" -i /usr/local/crtmpserver/etc/CRTMPServerSP.lua 
    sed "s/MEDIRDIR/${MEDIADIR}/g" -i /usr/local/crtmpserver/etc/CRTMPServerSP.lua 
             echo "add new crtmpserver to SM in IP地址";
    echo "/usr/local/crtmpserver/lib/crtmpserver/" >> /etc/ld.so.conf
    ldconfig
    rm /usr/local/crtmpserver/etc/crtmpserver.lua.sample
            sh /usr/local/crtmpserver/script/start.sh
    }
    install_EP(){
            cd /usr/local/crtmpserver/etc/
            cp /usr/local/crtmpserver/script/CRTMPServerEP.lua .
    SOURCEIP=$1
            sed "s/LOCALIP/${LOCALIP}/g" -i /usr/local/crtmpserver/etc/CRTMPServerEP.lua
    sed "s/SOURCEIP/${SOURCEIP}/g" -i /usr/local/crtmpserver/etc/CRTMPServerEP.lua 
    sed -e "s#LOGDIR#${LOGDIR}#g" -i /usr/local/crtmpserver/etc/CRTMPServerEP.lua 
    sed -e "s#MEDIADIR#${MEDIADIR}#g" -i /usr/local/crtmpserver/etc/CRTMPServerEP.lua 
             echo "please add new crtmpserver to SM in IP地址";
    echo "/usr/local/crtmpserver/lib/crtmpserver/" >> /etc/ld.so.conf
    ldconfig
    rm /usr/local/crtmpserver/etc/crtmpserver.lua.sample
            sh /usr/local/crtmpserver/script/start.sh
    }
    install_CHECK(){
    /bin/sh /usr/local/crtmpserver/script/checkcrtmpserver.sh >> /usr/local/crtmpserver/script/checkcrtmp.log 2>&1 &
    }
    case $1 in 
    SM ) 
    echo "SM_INSTALL" 
    install_crtmp
    install_SM
    ;;
    SP ) 
    echo "SP_INSTALL"
    install_crtmp
    install_SP $2
    install_CHECK
    ;;
    EP ) 
    echo "EP_INSTALL"
    install_crtmp
    install_EP $2
    install_CHECK
    ;;
    * ) echo "CHOOSE A SERVER TYPE: SM/SP/EP" ;;
    esac

    原文链接:
    http://blog.csdn.net/zongcai249/article/details/9342251

  • 相关阅读:
    Codeforces 611C. New Year and Domino 动态规划
    POJ2585 Window Pains 拓扑排序
    HDOJ1242 Rescue(营救) 搜索
    codeforces 数字区分 搜索
    ZOJ2412 Farm Irrigation(农田灌溉) 搜索
    hdu 4389 X mod f(x) 数位dp
    hdu 4734 F(x) 数位dp
    Codeforces Beta Round #51 D. Beautiful numbers 数位dp
    hdu 3652 B-number 数位dp
    bzoj 1026: [SCOI2009]windy数 数位dp
  • 原文地址:https://www.cnblogs.com/georgewangii/p/4604190.html
Copyright © 2011-2022 走看看