再生側にラグが発生する主な原因は以下の3種類です。
中国本土キャリアで提供されるブロードバンドパッケージでは、ダウンロード速度は10Mbps、20Mbps、さらには100Mbps、200Mbpsに達していますが、アップロード速度は制限されています。多くの小都市での最大上り速度は512Kbpsです(つまり、毎秒、64KBを上限とするデータしかアップロードできません)。
Wi-Fiは、IEEE 802.11が規定する搬送波感知多重アクセス/衝突回避方式(CSMA/CA)に準拠します。つまり、1つのWi-Fiホットスポットは1台のスマートフォンとしか同時に通信できず、スマートフォンはホットスポットと通信する前にまず通信できるかどうかを確認または照会する必要があるため、1つのWi-Fiホットスポットを使用する人数が多いほど速度が遅くなります。またWi-Fi信号は建物の壁によって著しく遮断されますが、通常、中国の平均的な家庭では内装時にWi-Fiルーターの位置と各部屋の信号の強度の問題をほとんど考慮していないため、キャスター自身もライブストリーミングを実行する部屋が屋内のルーターからいくつの壁を隔てているか、よくわかっていない可能性があります。
Tencent Cloud MLVB SDKを使用してプッシュする場合、このSDKは2秒ごとに内部の各ステータスパラメータをフィードバックするステータスフィードバックメカニズムを提供します。 V2TXLivePusherObserverで監視装置を登録し、その後、コールバック関数onStatisticsUpdateを介して、これらのステータスを取得することができます。 V2TXLivePusherStatisticsの関連ステータスの説明は次のとおりです。
プッシュ状態 | 定義と説明 |
---|---|
appCpu | 現在のAppのCPU使用率(%) |
systemCpu | 現在のシステムのCPU使用率(%) |
width | ビデオの幅 |
height | 画像高さ |
fps | フレームレート (fps) |
audioBitrate | オーディオビットレート(Kbps) |
videoBitrate | ビデオビットレート(Kbps) |
MLVB SDKのV2TXLivePusherObserverのonStatisticsUpdate コールバックにおけるV2TXLivePusherStatistics.fpsのステータスデータを介して、現在、プッシュするビデオフレームレートを取得することができます。通常、毎秒15フレーム以上のビデオストリームを使用することで、スムーズな視聴が保証されます。標準的なプッシュのFPSが10フレーム以下の場合、視聴者は明らかに画面にラグが発生したように感じます。
2.1 appCpuとsystemCpuのサイズの観察
MLVB SDKのV2TXLivePusherObserverのonStatisticsUpdate コールバックにおけるV2TXLivePusherStatistics.appCpuとV2TXLivePusherStatistics.systemCpuのステータスデータを介して、現在のプッシュSDKのCPU使用状況と現在のシステムのCPU使用状況を取得することができます。現在のシステム全体的のCPU使用率が80%を超える場合は、ビデオのキャプチャとコーディングがいずれも影響を受け、正常に機能することができません。CPU使用率が100%に達した場合は、キャスター自体に極めて大きなラグが発生しているため、視聴者はスムーズな視聴体験ができなくなります。
2.2 CPUを消費しているものを確認
ライブストリーミングAppでCPUを使用するのは、プッシュSDKだけではなく、弾幕、キラキラエフェクト、テキストメッセージのやり取りなども一定量のCPUを消費する可能性があり、これらはいずれも避けようがありません。プッシュSDKのCPU利用状況を測定したいだけの場合は、当社のツールキットDEMOを使用して観察と評価を行うことができます。
2.3 高解像度を盲目的に追及しない
ビデオ解像度が高すぎても、必ずしも鮮明な画質が得られるとは限りません。まず高解像度の効果を発揮させるためには、高ビットレートと整合させる必要があります。多くの場合、低ビットレート高解像度の明瞭度は、高ビットレート低解像度には及びません。次に、約5インチの平均的なスマートフォン画面で1280 x 720の解像度にメリットを見出すことはできません。960 x 540の解像度との違いを明確に感じ得るのは、PCのフルスクリーンで表示した場合だけです。しかし、高解像度は、SDKのCPU使用率を著しく上昇させるため、通常、MLVB SDKにおけるV2TXLivePusherのsetVideoQualityを使用してHDレベルに設定してください。高解像度を盲目的に追跡しても意図する目標に到達しない場合があります。
統計によると、ビデオクラウド顧客グループのライブストリーミングルームにおけるラグトラブルの80%以上は、キャスターのアップロードの渋滞が原因です。
解像度が重要なシーンでは、「現在のネットワーク品質が非常に不良であるため、ルーターの近くに移動し、Wi-Fi信号を壁で隔てないことをお勧めする」のが最良の選択であるというプロンプトを、適切なUIを介してキャスターに表示します。
MLVB SDKのプッシュ機能ドキュメントにはイベント処理の説明が含まれており、これを利用して実行することができます。推奨されるアプローチは次のとおりです。Appが短時間に複数のMLVB SDKのV2TXLIVE_WARNING_NETWORK_BUSYイベントを継続的に受信する場合は、現在のネットワーク品質に注意を払うようキャスターのネットワークにプロンプトを表示します。これは、キャスターがビデオのパフォーマンスから上りの渋滞を認識できず、視聴者の通知またはAppの通知を受けて初めて認識できるためです。
推奨するエンコード設定は次のとおりです。V2TXLivePusher 内の setVideoQuality インターフェースから対応するグレードの設定を行うことができます。
ユースケース | resolution | resolutionMode |
---|---|---|
ショーライブストリーミング | 横画面または縦画面 | |
モバイルライブストリーミング | V2TXLiveVideoResolution1280x720 | 横画面または縦画面 |
マイク接続(メイン画面) | V2TXLiveVideoResolution640x360 | 横画面または縦画面 |
マイク接続(小画面) | V2TXLiveVideoResolution480x360 | 横画面または縦画面 |
ブルーレイライブストリーミング | V2TXLiveVideoResolution1920x1080 | 横画面または縦画面 |
上図に示すとおり、下りネットワークが不安定である場合、または下り帯域幅が滞る場合は、いずれも再生中に飢餓時間が出現します(App はこの期間中は再生可能なオーディオおよびビデオデータを取得できません)。視聴端末でのビデオラグを最小限に抑制し、この「飢餓時間」を無事にやり過ごすためには、Appにできるだけ多くのビデオデータをキャッシュさせる必要があります。しかし、Appにオーディオおよびビデオデータを多くキャッシュさせ過ぎると、新たな問題 高ディレイが生じるおそれがあります。これはインタラクティブ性の要件が高いシナリオにとって非常に悪いニュースです。またディレイが修正、制御されない場合、ラグによって引き起こされたディレイには累積効果があり、再生時間が長くなればなるほど、ディレイも大きくなります。ディレイの修正が適切に行われるかどうかがプレーヤーの優劣を判断する重要な指標となります。したがって、ディレイとスムーズさはバランスが重要であり、低ディレイを強調しすぎると、軽微なネットワークの不安定性を引き起こし、顕著な再生端末のラグを発生させてしまいます。反対に、スムーズさを強調しすぎると、多くのディレイ(典型的なケースでは、HLS(m3u8)が20秒から30秒のディレイの発生により、スムーズな再生体験を実現します)が発生してしまうことになります。
マルチストリーム制御処理の知識が充分になくとも、より良い再生体験を最適化できるようにするため、Tencent Cloud MLVB SDKは、複数バージョンでの改良を経て、一連の自動調整技術が最適化されており、それをベースとして、3種類の優良な遅延制御スキームがリリースされています。V2TXLivePlayerのsetCacheParams で設定することができます。
説明:このモードでは、充分にスムーズな状況で視聴者とキャスター間の遅延を最小限に抑えることを保証し、優れたインタラクティブ体験を確保するために、プレーヤーは現在のネットワーク状況に応じて、遅延を自動的に調整します(デフォルトでは、プレーヤーは1秒~5秒の間隔で遅延の大きさを自動的に調整しますが、setCacheParamsを介してデフォルト値を変更することもできます)。
説明:超高速モードの設定方法は、minTime = maxTime = 1sであり、自動モードと超高速モードの違いはmaxTimeがやや異なるだけです(超高速モードのmaxTimeは通常やや低く、自動モードのmaxTimeはやや高くなっています)。この柔軟性は主にSDK内部の自動調節技術によるもので、ラグの原因とならずにディレイサイズを自動的に修正できます。maxTimeは調節速度を反映し、maxTimeの値が大きいほど、調節速度も保守的となり、ラグの確率も低くなります。
説明:
- このモードでプレーヤーが採用する処理ポリシーはAdobe Flashカーネルのキャッシュアウトポリシーと同じです。ビデオにラグが出現すると、バッファが一杯になるまでloading状態となり、抑止できないネットワークの不安定さが次に生じるまでplaying状態となります。デフォルトではバッファサイズは5秒ですが、setCacheParamsを介して変更できます。
- ディレイ要件が高くないシーンでは、この一見シンプルなモードの方が信頼性は高くなります。このモードが本質的にわずかなディレイを犠牲にしてラグ率を低下させるためです。
この記事はお役に立ちましたか?