前言

最近几年微服务可谓是大火,大家忙着建设微服务,学习微服务如何搭建,微服务技术体系的演变也使得企业公司能支持起灵活,多样化的业务需求和越来越多的访问量,有很多企业用户正在朝着业务中台,SAAS云平台进行发展,并能与时俱进跟上技术时代的脚步。而这篇文章呢,主要是讲解一下流媒体服务如何集群分流,附带讲解一下surging 特有的一些功能。

微服务特点

6个典型特点

1.高内聚,低耦合:程序模块的可重用性、移植性大大增强,针对于接口和业务模块的不同部署就能做到本地和远程调用;

2.单一职责:只负责某一业务功能;

3.独立:每个服务可以独立的开发、测试、构建、部署;

4. 灵活性:小而灵活可以满足开发不同类型的业务模块。

5.进程隔离:可以通过隔离,发生熔断,雪崩而不会影响其它服务调用和运行

6.多样性: 针对于协议的扩展可以支持多样化业务场景的解决方案。

部件和功能

通过上图发现,surging 可以支持以下功能:

1.可以支持web,移动端,物联网和流媒体等业务场景

2.可以支持rtmp ,http-flv,thrift,mqtt,ws,http,grpc 多种协议以满足不同业务的场景的需要

3,可以支持服务之间调用的链路追踪。

4.可以支持扫描模块引擎,cli 工具,任务调度服务,日志,swagger 文档,服务注册,服务发现,协议主机,缓存中间件,事件总线等功能。

实例

下面以上图流媒体集群分流的例子,看看是如何研发运行的。

以部署两台服务提供者为例,服务A,通过下载surging企业版(非商业用户不能用于商业,只能用于学习),通过以下配置来修改surgingSettings.json文件

 {
"Surging": { "Port": "${Surging_Server_Port}|81", "Ports": {
"HttpPort": "${HttpPort}|28",
"WSPort": "${WSPort}|96",
"MQTTPort": "${MQTTPort}|97",
"GrpcPort": "${GrpcPort}|95"
},
"LiveStream": {
"RtmpPort": 77, //rtmp 端口
"HttpFlvPort": 8081, //HttpFlv 端口
"EnableLog": true, //是否启用log
"EnableHttpFlv": true,
"RouteTemplate": "live1", //直播服务路由规则名称,可以根据规则设置,比如集群节点2,可以设置live2, 集群节点3,可以设置live3
"ClusterNode": 2 //集群节点数里,会根据routetemplate 转推流
}
}

服务B,通过以下配置来修改surgingSettings.json文件

 {
"Surging": { "Port": "${Surging_Server_Port}|82", "Ports": {
"HttpPort": "${HttpPort}|281",
"WSPort": "${WSPort}|961",
"MQTTPort": "${MQTTPort}|971",
"GrpcPort": "${GrpcPort}|951"
},
"LiveStream": {
"RtmpPort": 76, //rtmp 端口
"HttpFlvPort": 8080, //HttpFlv 端口
"EnableLog": true, //是否启用log
"EnableHttpFlv": true,
"RouteTemplate": "live1", //直播服务路由规则名称,可以根据规则设置,比如集群节点2,可以设置live2, 集群节点3,可以设置live3
"ClusterNode": 2 //集群节点数里,会根据routetemplate 转推流
}
}

然后可以通过ffmpeg或者obs进行推流,以ffmpeg 工具为例,可以输入以下命令

ffmpeg -re -i D:/大H包.HDTC1280高清国语中字版.mp4 -c copy -f flv rtmp://127.0.0.1:76/live1/livestream2

通过以下代码我们创建httpflv 的html 文件,url配置为:http://127.0.0.1:8080/live1/livestream2

<!DOCTYPE html>
<html> <head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>flv.js demo</title> <style>
.mainContainer {
display: block;
width: 1024px;
margin-left: auto;
margin-right: auto;
} .urlInput {
display: block;
width: 100%;
margin-left: auto;
margin-right: auto;
margin-top: 8px;
margin-bottom: 8px;
} .centeredVideo {
display: block;
width: 100%;
height: 576px;
margin-left: auto;
margin-right: auto;
margin-bottom: auto;
} .controls {
display: block;
width: 100%;
text-align: left;
margin-left: auto;
margin-right: auto;
margin-top: 8px;
margin-bottom: 10px;
} .logcatBox {
border-color: #CCCCCC;
font-size: 11px;
font-family: Menlo, Consolas, monospace;
display: block;
width: 100%;
text-align: left;
margin-left: auto;
margin-right: auto;
}
</style>
</head> <body> <div class="mainContainer">
<video name="videoElement" class="centeredVideo" id="videoElement" controls width="1024" height="576" autoplay>
Your browser is too old which doesn't support HTML5 video.
</video> </div> <script src="https://cdn.bootcdn.net/ajax/libs/flv.js/1.5.0/flv.min.js"></script> <script>
(function () {
if (flvjs.isSupported()) {
startVideo()
} function startVideo() {
var videoElement = document.getElementById('videoElement');
var flvPlayer = flvjs.createPlayer({
type: 'flv',
isLive: true,
hasAudio: true,
hasVideo: true,
enableStashBuffer: false,
url: 'http://127.0.0.1:8080/live1/livestream2'
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load();
window.setTimeout(function () { flvPlayer.play(); }, 500); } videoElement.addEventListener('click', function () {
alert('是否支持点播视频:' + flvjs.getFeatureList().mseFlvPlayback + ' 是否支持httpflv直播流:' + flvjs.getFeatureList().mseLiveFlvPlayback)
}) function destoryVideo() {
flvPlayer.pause();
flvPlayer.unload();
flvPlayer.detachMediaElement();
flvPlayer.destroy();
flvPlayer = null;
} function reloadVideo() {
destoryVideo()
startVideo()
}
}) (document)
</script> </body> </html>

然后就可以通过打开创建的html文件,运行效果如下图

通过potplay 配置服务A,链接为:rtmp://127.0.0.1:77/live1/livestream2,然后如下图所示:

可以通过potplay 配置服务B,链接为:rtmp://127.0.0.1:76/live1/livestream2,然后如下图所示:

结尾

通过此篇文章我们了解surging ,也了解如何播放httpflv ,如何针对于rtmp 推流转推到其它服务上进行订阅播放,后期计划打算支持rtsp 协议,也请各大用户和企业用户多多关注。

surging 基于流媒体服务如何集群分流的更多相关文章

  1. 基于puppet分布式集群管理公有云多租户的架构浅谈

    基于puppet分布式集群管理公有云多租户的架构浅谈 一.架构介绍   在此架构中,每个租户的业务集群部署一台puppet-master作为自己所在业务集群的puppet的主服务器,在每个业务集群所拥 ...

  2. 理解OpenShift(7):基于 Prometheus 的集群监控

    理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...

  3. 基于Ceph分布式集群实现docker跨主机共享数据卷

    上篇文章介绍了如何使用docker部署Ceph分布式存储集群,本篇在此基础之上,介绍如何基于Ceph分布式存储集群实现docker跨主机共享数据卷. 1.环境准备 在原来的环境基础之上,新增一台cen ...

  4. 从零开始:Mysql基于Amoeba的集群搭建

    从零开始:Mysql基于Amoeba的集群搭建 准备环境 1.mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 2.amoeba-mysql-binary-2.0. ...

  5. 基于k8s的集群稳定架构-转载

    基于k8s的集群稳定架构-转载 前言 我司的集群时刻处于崩溃的边缘,通过近三个月的掌握,发现我司的集群不稳定的原因有以下几点: 1.发版流程不稳定 2.缺少监控平台[最重要的原因] 3.缺少日志系统 ...

  6. 《基于Kubernetes舵手集群的设计与实现》

    前言 <基于Kubernetes舵手集群的设计与实现>是我的毕业设计项目.本系统采用Kubernetes容器编排.基于Jenkins\Gitlab的CICD技术.EFK日志收集.Prome ...

  7. RDD:基于内存的集群计算容错抽象(转)

    原文:http://shiyanjun.cn/archives/744.html 该论文来自Berkeley实验室,英文标题为:Resilient Distributed Datasets: A Fa ...

  8. 基于Hadoop分布式集群YARN模式下的TensorFlowOnSpark平台搭建

    1. 介绍 在过去几年中,神经网络已经有了很壮观的进展,现在他们几乎已经是图像识别和自动翻译领域中最强者[1].为了从海量数据中获得洞察力,需要部署分布式深度学习.现有的DL框架通常需要为深度学习设置 ...

  9. RDD:基于内存的集群计算容错抽象

    转载自:http://shiyanjun.cn/archives/744.html 摘要 本文提出了分布式内存抽象的概念--弹性分布式数据集(RDD,Resilient Distributed Dat ...

随机推荐

  1. 关于 PDB 文件你需要知道什么?

    引言 大多数人知道 PDB 文件是用来帮助我们 debug 的,但也仅此而已. 本文主要介绍当你遇到 PDB 文件时(windows 开发中),你必须要知道的内容. 重要的事情说三遍 PDB 文件和源 ...

  2. 如何使用excel制作查分系统

    在工作学习中,我们经常会遇到使用excel制作查分系统这样的问题.培根说过:读书足以恬情,足以博采,足以长才.因此,面对使用excel制作查分系统我们应该有努力探索的精神.书到用时方恨少,事非经过不知 ...

  3. SpringMVC自定义兼容性Handler

    写在前面 看到这篇博客时,默认你知道Spring MVC中handler的作用,及前台请求到响应的的流转. 感谢网上其他大佬博客给我的借鉴,博客地址这里忘记了. 自定义Handler 我有时候会考虑是 ...

  4. hessian简单介绍

    Hessian是基于HTTP的轻量级远程服务解决方案,Hessian像Rmi一样,使用二进制消息进行客户端和服务器端交互.但与其他二进制远程调用技术(例如Rmi)不同的是,它的二进制消息可以移植其他非 ...

  5. WorkSkill整理之 技能体系

  6. go beego框架与python实现数据交互

    目标:将go中一个二维数组传到pythone中处理并返回.难点在于数据格式的转换. go代码如下: package main import ( "os/exec" "sy ...

  7. Python爬虫知识

    一.爬虫 1.概述 网络爬虫,搜索引擎就是爬虫的应用者. 2.爬虫分类 (1)通用爬虫,常见就是搜索引擎,无差别的收集数据,存储,提取关键字,构建索引库,给用户提供搜索接口. 爬取一般流程: 初始化一 ...

  8. python-类的隐藏和封装

    7 """ 8 封装是面对对象的三大特征之一(另外两个是集成和多态),它指的是将对象> 的信息隐藏在对象的内部,不允许外部程序直接访问对象内部信息,而是通> ...

  9. Go语言中使用K8s API及一些常用API整理

    Go Client 在进入代码之前,理解k8s的go client项目是对我们又帮助的.它是k8s client中最古老的一个,因此具有很多特性. Client-go 没有使用Swagger生成器,就 ...

  10. 从零玩转第三方登录之QQ登录

    从零玩转第三方登录之QQ登录 前言 在真正开始对接之前,我们先来聊一聊后台的方案设计.既然是对接第三方登录,那就免不了如何将用户信息保存.首先需要明确一点的是,用户在第三方登录成功之后, 我们能拿到的 ...