リアルタイムストリーミング (RTS) でレイテンシーが発生する原因と、その削減方法について説明します。
RTS レイテンシーの一般的な原因
|
段階 |
一般的な原因 |
|
|
|
ネットワーク伝送 |
|
|
|
|
ストリームの取り込み
OBS Studio の設定
OBS Studio を次のように設定します。
OBS Studio で、[設定] > [出力] ページに移動します。[出力モード] を [詳細] に設定し、[配信] タブを選択します。[エンコーダー] を [x264]、[レート制御] を [CBR]、[ビットレート] を 2500 Kbps に設定します。[キーフレーム間隔] を 1 秒、[CPU 使用のプリセット] を ultrafast、[プロファイル] を baseline、[チューン] を zerolatency に設定します。
vMix の設定
vMix を次のように設定します。
[ストリーミング品質] ダイアログボックスで、[映像ビットレート] を 1500、[エンコードサイズ] を 1920 x 1080、[音声ビットレート] を 128 に設定します。[映像] セクションで、[プロファイル] を Baseline、[レベル] を 3.1、[プリセット] を ultrafast に設定します。次に、[キーフレーム間隔] を 1 秒、[スレッド] を 4、[ネットワークバッファー] を 20 秒 に設定します。主要なパラメーターは、[レベル]、[プリセット]、[スレッド]、[ネットワークバッファー] です。
プッシュ SDK の設定
映像の GOP を 1 に設定し、他の設定はデフォルトのままにします。
Android
mAlivcLivePushConfig = new AlivcLivePushConfig();
mAlivcLivePushConfig.setVideoEncodeGop(AlivcVideoEncodeGopEnum.GOP_ONE);
iOS
AlivcLivePushConfig *pushConfig = [[AlivcLivePushConfig alloc] init];
pushConfig.videoEncodeGop = AlivcLivePushVideoEncodeGOP_1;
Web
Web 用プッシュ SDK は、デフォルトで最適化されています。
取り込みネットワーク
安定した取り込みネットワークは不可欠です。ネットワークの問題を切り分けるには、ネットワークを切り替えて、同じデバイスから再度取り込みを行います。レイテンシーが低下した場合、元のネットワークが原因です。
デバイスの負荷
取り込みデバイスの CPU またはメモリ使用率が高いと、キャプチャとエンコードの効率が低下し、レイテンシーが増加します。これを切り分けるには、同じネットワークと設定を使用して別のデバイスでテストします。
再生
Native Player SDK の設定
RTS は WebRTC プロトコルを使用しており、パケット損失やジッターに効果的に対処します。レイテンシーをさらに削減するには、プレーヤーのバッファリング戦略を最適化します。
ApsaraVideo Player SDK v5.5.6.0 以降、またはプレーヤーのデモでは、デフォルトで最適なレイテンシー設定が適用されます。調整は不要です。
レイテンシーの問題が解決しない場合は、RTS SDK のログを分析します。
-
ストリームのレイテンシー:ApsaraVideo Player SDK for Android または ApsaraVideo Player SDK for iOS のログを有効にします。
code=154のエントリを見つけて、エンドツーエンドのレイテンシー (ms) を確認します。-
gd (globalDelayMS):エンドツーエンドのレイテンシー。
-
td (transDelayMS):取り込みと CDN 伝送のレイテンシーの合計。800 ms を超える値は、取り込みまたは CDN のレイテンシーが高いことを示唆します。
-
nd (network delay):CDN からプレーヤーまでのネットワークレイテンシー。800 ms を超える値は、ネットワークの問題を示唆します。
-
jd (jitterDelayMS):ジッター除去バッファーのレイテンシー。800 ms を超える値は、ネットワークの問題を示唆します。
-
ud (user buffer length):ユーザーバッファー長。通常は 0 で、無視できます。
-
dd (decoder delay):デコードのレイテンシー。800 ms を超える値は、プレーヤーのデコードの問題を示唆します。
-
rd (render delay):レンダリングのレイテンシー。800 ms を超える値は、プレーヤーのレンダリングの問題を示唆します。
-
ut:このフィールドは無視できます。
-
-
初回フレームのレイテンシー:SDK ログで
code=161のエントリを見つけます。st:0,init:1,sdns:0,rdns:2,sc:0,ced:12,sub:5,frsp:309,si:8,fp:13,ffc:5,ffo:416,sum:763sumが測定された初回フレームのレイテンシーと大きく異なる場合は、デコードまたはレンダリングの問題が疑われます。sumが測定値に近い場合は、個々のフィールドをチェックしてボトルネックを見つけます。ced、frsp、またはffcの値が高い場合は、通常、ネットワークの問題を示します。
Web Player SDK の設定
ApsaraVideo Player SDK for Web は、ブラウザーのデフォルトのバッファーポリシーに依存しており、追加の設定は不要です。高レイテンシーを診断するには、Chrome で chrome://webrtc-internals を開きます。

主要なメトリクス:
-
inbound-rtp (kind=audio) および inbound-rtp (kind=video):リアルタイムのデータ受信とデコードの状態を示します。
framesDroppedの値が高い、またはframesDecoded/sの値が想定外である場合、デコードの問題を示しています。取り込みとトランスコーディングの設定を確認してください。 -
candidate-pair:接続状態を示します。
currentRoundTripTimeの値が高い、またはinbound-rtpのpacketsLostの値が高い場合は、ネットワークの問題を示しています。
音声のみおよび映像のみのストリームのレイテンシー
ソースストリームが音声のみまたは映像のみの場合、Alibaba Cloud はデフォルトで欠落しているトラックを 5 秒間待機します。この遅延により、再生開始時に黒い画面や無音が発生する可能性があります。この遅延を回避するには、ストリーミング URL に @subvideo=no または @subaudio=no を追加して、欠落しているトラックのサブスクライブを解除します。
-
URL が
artc://example.aliyundoc.com/app/stream?auth_key={your_auth_key}の映像のみのストリームの場合、URL をartc://example.aliyundoc.com/app/stream?auth_key={your_auth_key}@subaudio=noに変更します。 -
URL が
artc://example.aliyundoc.com/app/stream?auth_key={your_auth_key}の音声のみのストリームの場合、URL をartc://example.aliyundoc.com/app/stream?auth_key={your_auth_key}@subvideo=noに変更します。
再生ネットワーク
安定した再生ネットワークを確保してください。不安定なネットワークでは、ApsaraVideo Player SDK はスムーズな再生を維持するためにローカルバッファーを増加させますが、これによりレイテンシーが追加されます。
トランスコーディング
トランスコーディングは、ライブストリームに 300~500 ms のレイテンシーを追加します。RTS は 2 種類のトランスコーディングをサポートしています。
-
H5 自動トランスコーディング:RTMP ストリームが Web 再生のために取り込まれる際に適用されます。追加されるレイテンシーは最小限であり、回避できません。
-
カスタムトランスコーディングテンプレート:トランスコードされたストリームを再生すると、2つの要因によってレイテンシーが発生する可能性があります。
-
処理レイテンシー:トランスコードされたストリームに 300~500 ms の回避不可能なレイテンシーが追加されます。
-
開始レイテンシー:[トリガーによるトランスコーディング] が有効な場合、最初の視聴者がストリームをリクエストしたときにのみトランスコーディングが開始され、約 200 ms の起動レイテンシーが追加されます。
説明トリガーによるトランスコーディングは、トランスコーディングテンプレートを作成する際に設定されます。これを無効にするには、新しいテンプレートを作成し、再度ストリームの取り込みを行い、レイテンシーを再テストします。
-
お問い合わせ
これらのトラブルシューティング手順を実行しても高レイテンシーの問題が解決しない場合は、チケットを送信してください。以下の情報を含めてください。
-
テストに使用した取り込み URL とストリーミング URL。
-
使用した取り込みツールと再生ツール (例:OBS Studio と ApsaraVideo Player SDK for Web)。
-
完了したトラブルシューティング手順の概要。