surging 基於流媒體服務如何集羣分流

前言

最近幾年微服務可謂是大火,大家忙着建設微服務,學習微服務如何搭建,微服務技術體系的演變也使得企業公司能支持起靈活,多樣化的業務需求和越來越多的訪問量,有很多企業用戶正在朝着業務中臺,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 協議,也請各大用戶和企業用戶多多關注。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章