技術共有

SRS ライブ ブロードキャスト イントラネット ストリーミング帯域幅の問題記録

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

問題の背景

ありがとうクラウドサーバー上に展開され、32コアCPU、64Gメモリ、帯域幅300M。
クライアントは SRS からストリームをプルし、外部ネットワーク クライアントがストリームをプルしていることを検出します。CPU帯域幅も正常です。ただし、イントラネット クライアントがストリームをプルし、ストリームをプルする人の数が 5 人を超えると、帯域幅が急増します。
ここに画像の説明を挿入します

トラブルシューティング

srs-bench を使用して SRS ストレス テスト、vlc プレーヤー SRS ストリーミング、およびクライアント SRS ストリーミングを実行する

プッシュストリーミング

ストリームをプッシュするには、ffmpeg を選択してストリームをプッシュします。

ffmpeg -re -i C:UserswDesktoptest.mp4 -vcodec copy -acodec copy -f flv -y rtmp://27.128.236.38/live/livestream
  • 1

A.srs-bench プル フロー

./objs/srs_bench -sr webrtc://27.128.236.38/live/livestream -nn 10
  • 1

srs-bench のコンパイルと展開に関する参考記事:SRS ストレス テスト – SRS-Bench

B.vlc プル ストリーム

媒体->打开网络串流
输入url:https://ip:8088/live/livestream.flv
  • 1
  • 2

西安、南京、北京でそれぞれSRSベンチ、クライアント、VLCストレステストを実施
テスト記録は次のとおりです。

環境1人5人6名10名30名
西安サーバーストレステストネットワークセグメントA普通普通異常な異常な異常な
西安サーバーストレステストネットワークセグメントB普通普通普通不安定な不安定な
西安の実際のクライアント普通普通普通異常な異常な
西安クライアント圧力テスト普通普通普通異常な異常な
南京サーバー普通普通普通普通普通
南京の実際のクライアント普通普通普通普通/
南京クライアント圧力テスト普通普通普通普通/
北京サーバー普通普通異常な異常な異常な
北京の実際のクライアント普通普通普通普通/
外部ネットワーク圧力テスト普通普通普通普通普通
VLC圧力テスト普通普通普通普通/

検証結果

外部ネットワーク環境ストレステスト、帯域幅は正常、CPU は正常
イントラネット環境ストレステスト、5人以上いると帯域幅が10倍に急増

パケットキャプチャの比較

ここに画像の説明を挿入します

分析する

異常環境では通常環境に比べて遅延率が高く、パケットロスや再送が発生します。

SRS公式サイトをチェックSRS公式サイト
コア プロトコル – webrtc の config の webrtc 部分の設定

最初の部分である rtc_server は、グローバル RTC サーバー構成です。いくつかの主要な構成は次のとおりです。

enabled:是否开启RTC服务器,默认是off。
listen:侦听的RTC端口,注意是UDP协议。
candidate:服务器提供服务的IP地址,由于RTC的特殊性,必须配置这个地址。详细参考Config: Candidate
tcp.listen: 使用TCP传输WebRTC媒体数据,侦听的TCP端口。详细参考WebRTC over TCP
  • 1
  • 2
  • 3
  • 4

2 番目の部分、各仮想ホストの RTC 構成には、いくつかの主要な構成が含まれます。

rtc.enabled:是否开启RTC能力,默认是off。
rtc.rtmp_to_rtc:是否开启RTMP转RTC。
rtc.rtc_to_rtmp:是否开启RTC转RTMP。
rtc.stun_timeout:会话超时时间,单位秒。
rtc.nack:是否开启NACK的支持,即丢包重传,默认on。
rtc.twcc:是否开启TWCC的支持,即拥塞控制的反馈机制,默认on。
rtc.dtls_role:DTLS角色,active就是DTLS Client(主动发起),passive是DTLS Server(被动接受)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

rtc.nack 設定のデフォルトはオンであることがわかりました。これは、SRS がパケット損失を検出した場合、継続的にデータを再送信することを意味します。

結論は

社内のイントラネット環境を調査した結果、クライアントのストリーミング帯域幅が一定のサイズを超えると、イントラネット環境に帯域制限があることが判明しました。
このとき、SRS はネットワークが異常であると判断し、パケットが失われ再送信されるため、帯域幅は急増し続けます。

解決する

オプション 1: イントラネット環境の帯域幅制限を緩和する

メリット: ライブストリーミングの安定性を確保
短所: 企業はクライアントの帯域幅を監視できないため、コストが増加します。

シナリオ 2:

利点: 内部ネットワークと外部ネットワークの通常の状況では、ライブ ストリーミングは正常に行われ、帯域幅の消費はわずかです。
欠点:ネットワーク異常により、SRSが失われたパケットを再送せず、モザイクや遅延などの問題が発生する場合があります。