流媒体网站的服务器主要分为两个部分:流服务 与 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

流媒体技术服务器常用部署方式相关推荐

  1. java视频教程enet网络,流媒体技术原理及播放方式(浅显易懂)

    一.流媒体技术原理 流式传输的实现需要缓存.因为Internet以包传输为基础进行断续的异步传输,对一个实时A/V源或存储 的A/V文件,在传输中它们要被分解为许多包,由于网络 是 动态变化的,各个包 ...

  2. 服务器负载均衡的部署方式

    作者:virtualadc 链接:http://virtualadc.blog.51cto.com/3027116/611592 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. ...

  3. 呼叫中心服务器怎么设置,本地呼叫中心和云呼叫中心服务器部署方式

    呼叫中心系统是企业常用的客户呼叫中心,分为本地服务器搭建呼叫中心和直接采用厂商的云呼叫中心服务模式,而企业很难确定自己选择哪种模式,下面我们为搭建详细介绍及推荐本地呼叫中心和云呼叫中心服务器部署方式. ...

  4. 网络云存储技术Windows server 2012 (项目二十 一 基于Cluster的高可用企业WEB服务器的部署)

    网络云存储技术Windows server 2012 (项目二十一 基于Cluster的高可用企业WEB服务器的部署) 前言 网络存储技术,是以互联网为载体实现数据的传输与存储,它采用面向网络的存储体 ...

  5. Spring Boot:开发常用的热部署方式汇总

    Spring Boot:开发常用的热部署方式汇总 平时开发Sprig Boot的时候,经常改动个小小的地方就要重新启动项目,这无疑是一种很差的体验.在此,博主收集了3种热部署的方案供大家选择. 正文 ...

  6. 阿里云— 第二篇:云服务器的购买方式和搭建部署(图文结合,一目了然)

    云服务器的购买方式和搭建部署 一:服务器 二:拥有阿里云账户 三:云服务器的购买方式 一:自定义购买方式 二:通过官方优惠活动方式购买 三:优惠活动图 四:活动列表 四:阿里云也为大学生提供了优惠的服 ...

  7. python程序部署到tomcat服务器_全面解读python web 程序的9种部署方式

    源地址:http://www.linuxde.net/2013/03/13097.html 全面解读python web 程序的9种部署方式 web server ---->applicatio ...

  8. gitlab ci 自动化部署_前端gitLab加jenkins自动化构建和部署,以及服务器常用的linux命令行操作,免密登录...

    常用的linux命令行操作 将项目部署到服务器后,需要查看文件是否已经部署成功,已经对文件进行增删改查操作,就需要用到命令行操作,常用操作如下: ll 罗列出当前文件或目录的详细信息,含有时间.读写权 ...

  9. netcore一键部署到linux服务器以服务方式后台运行

    AntDeploy 是我开发一款开源一键发布插件 将本地vs中的代码,一键打包,部署到任意的远程服务器 部署方式支持 windows服务,linux服务,docker容器,iis 支持增量发布(只更新 ...

最新文章

  1. uniapp 子组件 props拿不到数据_Vue组件间的通信
  2. python发邮件11002_Python学习笔记(二)——数字类型的运算及其输入与格式化输出...
  3. 【Apache Mina2.0开发之二】自定义实现Server/Client端的编解码工厂(自定义编码与解码器)!...
  4. javase_03作业
  5. 同步手绘板——json
  6. 获取skipcase
  7. swift 笔记 (十四) —— 构造过程
  8. Linux命令解释之chown
  9. 关于小米手机用微信会重启的问题
  10. 程序员经常去的编程教学视频网站
  11. 【Android】DatePicker时间选择器
  12. mysql启动服务报Found option without preceding group in config file
  13. 如何学计算机打字,新手学习计算机打字全文阅读
  14. SyncToy 2.1
  15. 计算机课学生评价用语,主题班会课对学生的评价用语
  16. 上海居住证转户口证攻略
  17. 有道云笔记迁移到Obsidian的方法(保留文件创建时间)
  18. conda虚拟环境下使用pip安装包报错Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)
  19. 反激式变换器(Flyback Converter)的工作原理
  20. 深度学习真的working吗

热门文章

  1. 电脑怎么设置动态壁纸?关于Windows和Mac壁纸的设置方法
  2. html怎么设置y轴,Y轴方向跑马灯的实现
  3. putty 的下载,免费分享
  4. Java智慧校园系统源码,智慧学校源码 +小程序+电子班牌
  5. DirectX12(D3D12)基础教程(十七)——让小姐姐翩翩起舞(3D骨骼动画渲染【6】)
  6. 大厂软件的阉割版,简直不要太好用!
  7. arcpy强制升级pip,numpy
  8. Android 蓝牙学习
  9. 新萝卜家园 Ghost XP SP3 装机至尊版 2013.04
  10. 物流企业对计算机网络技术的投资,计算机网络技术在现代物流中的应用探究.doc...