Skip to content

概要

サーバーを1つのP2Pノードとして扱い、グローバルIPと大容量帯域幅という強みを活かして、他のノードに接続できないクライアントにサービスを提供します。master/workerアーキテクチャを採用しており、masterはworkerプロセスの作成とスケジューリングを担当し、workerプロセスは実際の「シード(種)」処理を担当します。各workerは1つのチャンネルのみをシードでき、1つのチャンネルは複数のworkerによって同時にシードされることができます。

サーバーの選定

各workerプロセスは最大200クライアントにサービスを提供でき、おおよそCPU1コア、メモリ400MB、帯域幅200Mbpsを消費します。VODビジネスの場合はキャッシュコンテンツ用の十分なディスク容量も必要です。管理パネルに表示される人気チャンネル数を参考に適切なサーバー構成を選定してください。OSは現時点ではLinuxのみ対応しています。

Linuxディストリビューションの要件

  • Ubuntu 20以上
  • CentOS 8以上

SDKバージョンの要件

Web HLS SDKバージョン >= 2.7.0
Android SDKバージョン >= 3.4.0

プログラムのインストール

自動インストール

ポート8080でリッスンする場合の例:

sh
wget -qN https://cdn.swarmcloud.net/super-peer.sh && bash super-peer.sh --port 8080

手動インストール

node.jsのインストール

すでにnode.jsをインストール済みの場合は、この手順は不要です

sh
wget https://npmmirror.com/mirrors/node/v18.15.0/node-v18.15.0-linux-x64.tar.xz
tar -xvf node-v18.15.0-linux-x64.tar.xz
sudo mkdir -p /usr/local/nodejs
sudo mv node-v18.15.0-linux-x64/* /usr/local/nodejs/
sudo ln -s /usr/local/nodejs/bin/node /usr/local/bin
sudo ln -s /usr/local/nodejs/bin/npm /usr/local/bin

スーパーノードプログラムのダウンロード

sh
wget https://cdn.swarmcloud.net/super-peer.zip
unzip super-peer.zip

スーパーノードの起動

ポート8080でリッスンする場合の例:

sh
cd super-peer && echo listenPort=8080 >> .env

pm2はNodeアプリケーションのプロセスマネージャーで、スーパーノードのプロセス監視に使用します:

sh
npm i -g pm2
sudo ln -s /usr/local/nodejs/bin/pm2 /usr/local/bin
pm2 start index.js -n super-peer

スーパーノードの紐付け

管理パネルにログインし、P2P設定 -> スーパーノード管理 -> +スーパーノード の順にクリックし、サーバーのURLアドレス(http://ip:port)や帯域幅などの情報を入力して確定をクリックします。 サーバーのステータスが「停止済み」と表示される場合は、サーバーに接続できていないことを意味します。各手順が正しいか確認し、ファイアウォールの設定が正しいことを確認してください。

WARNING

ライブ配信モードでは、スーパーノードは直線距離7000km以内のクライアントにのみサービスを提供できます。可能な限りユーザーに近いサーバーを選んでデプロイしてください。

シグナリングの設定

アプリケーションの管理パネルでシグナリングを設定している場合、スーパーノードのドメインにも同じシグナリングアドレスを設定する必要があります。

シード戦略

デフォルトでは、スケジューリングサーバーは現在の人気チャンネルの順位に応じて自動的にシードを行います。自動シードを無効にすることもでき、その場合はスーパーノード管理ページの上部で再生アドレスを入力してBase64を生成し、「シード」ボタンをクリックして関連情報を入力してください。

スーパーノードの監視

スーパーノード管理ページで該当サーバーの監視ボタンをクリックすると、各workerプロセスの接続ノード数、アップロードトラフィック(単位:KB)、システムリソースの使用状況などの情報を確認できます。特定のworkerプロセスを再起動または強制終了することもできます。

アクセストークンの設定(任意)

プログラムを起動する前に、以下のスクリプトを実行してAccessTokenを作成できます:

sh
echo 'accessToken=ACCESS_TOKEN' >> .env

ACCESS_TOKENは任意に指定できるtokenです。管理パネルでスーパーノードを紐付ける際に設定するAccessTokenと一致させる必要があります。

シグナリングアドレスの設定(任意)

管理パネルでシグナリングアドレスを設定する以外にも、.env ファイルを通じて設定することができ、地域ごとに異なるシグナリングアドレスを使用できます:

sh
echo 'signal1=wss://example.com' >> .env
# echo 'signal2=wss://example2.com' >> .env

signal1はメインのシグナリングアドレス、signal2はバックアップのシグナリングアドレスです。

起動時の自動実行(任意)

プログラムを起動した後、以下のスクリプトを使用すると、システム起動時にプロセスが自動的に再起動されるようになります:

sh
pm2 save && pm2 startup

スーパーノードの更新(任意)

先にファイルを置き換えてから、プログラムを再起動します:

sh
wget -N https://cdn.swarmcloud.net/super-peer.zip && unzip -o super-peer.zip
pm2 restart super-peer
pm2 save

以下のコマンドを直接実行することもできます:

sh
wget -qN https://cdn.swarmcloud.net/super-peer.sh && bash super-peer.sh

Restful API

HTTPリクエストヘッダー

パラメータ名説明必須
X-ACCESS-TOKENstringアクセストークン。スーパーノード起動時に設定したものと一致させる必要がありますいいえ

Ping

接続性を確認します。同時に帯域幅やworker数を設定することもできます

sh
POST /ping

リクエストボディ

パラメータ名説明必須
bandwidthintサーバーの帯域幅、単位はMbpsいいえ
workersintworkerプロセス数を強制的に指定いいえ

レスポンス

パラメータ名説明
workersint現在のworkerプロセス数

Seed

スーパーノードにシード情報を送信します

sh
POST /seed

リクエストボディ

パラメータ名説明必須
listarrayシード情報のリストはい

リクエストボディの例:

json
{
    "list": [
        {
            "token": ユーザーtoken
            "channel": チャンネルID(Base64エンコード)
            "trackerZone": trackerの所在地域(cn, hk, us)
            "live": ライブ配信かどうか
            "signal1": メインシグナリングアドレス
            "signal2": バックアップシグナリングアドレス
            "priority": シードの優先度
            "keepAlive": 常駐させるかどうか
            "noUseDiskCache": VODでディスクキャッシュを使用しない
            "maxConnections": 最大P2P接続数、デフォルト80
            "label": カスタムスーパーノードラベル
        }
    ]

}

レスポンス

Status: 200

Stats

すべてのリアルタイム統計情報をリクエスト

sh
GET /stats

特定のworkerの統計情報をリクエスト

sh
GET /stats/:pid

pidはworkerのプロセスIDです

特定のchannelIdの統計情報をリクエスト

sh
GET /stats/:channelId

channelIdはチャンネルIDのBase64エンコードです

すべてのworkerを停止

sh
POST /stop_all

特定のworkerを停止

sh
POST /stop/:pid

すべてのworkerを再起動

sh
POST /restart_all

特定のworkerを再起動

sh
POST /restart/:pid

粤ICP备18075581号