クラむアントの芳枬可胜性りェブ

Vonage Video SDKは、ほずんどのナヌスケヌスで掚奚される高レベルの統蚈APIを通じお、詳现なストリヌム品質メトリクスを公開したす。このAPIは、音声、ビデオ、ネットワヌク、および送信者偎の統蚈を、ピア接続の遷移をたたいで安定したたた、統䞀されたセッション認識圢匏で提䟛したす。高床なデバッグのために、SDKは未凊理のピア接続デヌタを反映する生のWebRTC統蚈レポヌトぞのアクセスも提䟛したす。

SDKはたた、パブリッシャヌずサブスクラむバヌの䞡方に察しお、接続の健党性をハむレベルで評䟡するネットワヌク・コンディション・メトリクスを公開したす。これらのメトリクスには、ネットワヌク・コンディション・スコア、そのスコアの理由、およびサブスクラむバに぀いおは、芳察された問題の原因が接続のどちらにあるかを瀺すデグラデヌション・゜ヌスが含たれたす。参照 ネットワヌクの状態ず劣化の原因 詳现はこちら。

オヌディオ、ビデオ、メディアリンク統蚈API

Vonage Video Web SDKは、パブリッシャヌずサブスクラむバヌの䞡方に察しお、オヌディオ、ビデオ、メディアリンクの統蚈情報を定期的に送信したす。これらには、パケット数、ビットレヌト、フレヌムレヌトデヌタ、䞀時停止/フリヌズメトリクス、コヌデック情報、および垯域幅掚定やネットワヌク状態スコアリングなどのトランスポヌトレベルのネットワヌクメトリクスが含たれたす。

出版瀟の統蚈を取る

に぀いお Publisher.getStats() メ゜ッドは オブゞェクトの配列を提䟛したす。 ルヌティングされたセッション( オヌプントヌク メディア・ルヌタヌ)、この配列には1぀のオブゞェクトが含たれ、Vonage Video Media Routerに送信される単䞀のオヌディオ・ビデオ・ストリヌムの統蚈情報を定矩したす。 この配列には、Vonage Video Media Router に送信される単䞀のオヌディオ・ビデオ・ストリヌムの統蚈情報を定矩する 1 ぀のオブゞェクトが含たれたす。䞭継セッションの堎合、 には、公開ストリヌムの加入者ごずのオブゞェクトが含たれたす。

以䞋のコヌドでは、パブリッシャヌのストリヌムのメトリクスを毎秒ログしおいたす

window.setInterval(() => {
  publisher.getStats((error, statsArray) => {
    if (error) {
      console.error(error);
      return;
    }

    statsArray.forEach(statsContainer => {
      const stats = statsContainer.stats;
      const connectionId = stats.connectionId || 'routed';

      console.log(`\nStats for ${connectionId}`);
      if (stats.video) {
        const video = stats.video;

        if (video.layers && video.layers.length > 0) {
          console.log(`Video layers: ${video.layers.length}`);

          video.layers.forEach((layer, index) => {
            console.log(` Layer ${index}: ${layer.width}x${layer.height}`);
            console.log(`   encodedFrameRate: ${layer.encodedFrameRate} fps`);
            console.log(`   bitrate: ${layer.bitrate} bps`);
            console.log(`   totalBitrate: ${layer.totalBitrate} bps`);
            console.log(`   codec: ${layer.codec}`);
            console.log(`   scalabilityMode: ${layer.scalabilityMode}`);
            if (layer.qualityLimitationReason) {
              console.log(`   qualityLimitationReason: ${layer.qualityLimitationReason}`);
            }
          });
        }

        console.log('transport estimated bandwidth:', stats.mediaLink.transport.connectionEstimatedBandwidth, 'bps');
        console.log('network condition:', stats.mediaLink.transport.networkCondition);
        console.log('network condition reason:', stats.mediaLink.transport.networkConditionReason);
      }
    });
  });
}, 1000);

パブリッシャヌでのビデオ品質むベントの受信

ずの統蚈ポヌリングに加え Publisher.getStats()を賌読するこずで、パブリッシャヌがビデオの品質に意味のある倉化を怜出したずきに、リアルタむムで通知を聞くこずができたす。 videoQualityChanged むベントを開催する

publisher.on('videoQualityChanged', ({ reason, statsContainer }) => {
  console.log('Video quality change reason:', reason);

  const { stats } = statsContainer;

  if (stats.video && stats.video.layers) {
    stats.video.layers.forEach((layer) => {
      console.log(
        `Resolution: ${layer.width}x${layer.height}, FPS: ${layer.frameRate}`
      );
    });
  }
});

パブリッシャヌでのネットワヌク状況むベントの受信

パブリッシャヌのネットワヌク状態倉化むベントを受け取るには networkConditionChanged むベントを開催する

publisher.on('networkConditionChanged', ({ reason, statsContainer }) => {
  const { stats } = statsContainer;
  console.log('Network condition changed.');
  console.log(`Network Condition: ${stats.mediaLink.transport.networkCondition}, Reason: ${stats.mediaLink.transport.networkConditionReason}`);
});

このむベントは、パブリッシャヌに察しおネットワヌク状態の重倧な倉化が怜知されたずきにトリガヌされる。このむベントは statsContainer オブゞェクトには、圱響を受けたサブスクラむバのメディアリンク統蚈が含たれたす。リレヌされたセッションでは、圱響を受けたサブスクラむバの統蚈のみがむベントに含たれたす。

賌読者の統蚈情報の取埗

に぀いお getStats() メ゜ッドは、サブスクラむバのストリヌムに関する情報を提䟛したす。 サブスクラむバのストリヌムに関する情報を提䟛したす。

以䞋のコヌドは、加入者のストリヌムに぀いお、1秒ごずにいく぀かのメトリクスを蚘録する

window.setInterval(() => {
  subscriber.getStats((error, stats) => {
    if (error) {
      console.error('Error getting subscriber stats: ', error.message);
      return;
    }

    const video = stats.video;

    if (video) {
      console.log('video bitrate:', video.bitrate, 'bps');
      console.log('video totalBitrate:', video.totalBitrate, 'bps');
      console.log('decoded frame rate:', video.decodedFrameRate, 'fps');
      console.log('codec:', video.codec);
      console.log('res:', `${video.width}x${video.height}`);

      console.log('freezeCount:', video.freezeCount);
      console.log('totalFreezesDuration:', video.totalFreezesDuration, 'ms');
      console.log('pauseCount:', video.pauseCount);
      console.log('totalPausesDuration:', video.totalPausesDuration, 'ms');
    }
  });
}, 1000);

加入者のビデオ品質むベントの受信

を聎くこずができる。 videoQualityChanged むベントで、ビデオ画質の著しい䞭断や倉化が怜出されたずきに通知されたす。

subscriber.on('videoQualityChanged', ({ reason, stats }) => {
  if (reason === 'videoInterruption') {
    console.warn('Video playback was interrupted');

    if (stats.video.freezeCount > 0) {
      console.log(`Freeze count: ${stats.video.freezeCount}`);
    }

    if (stats.video.pauseCount > 0) {
      console.log(`Pause count: ${stats.video.pauseCount}`);
    }
  }
});

加入者のネットワヌク状態むベントの受信

サブスクラむバヌのネットワヌク条件倉曎むベントを受け取るには、以䞋のようにリッスンする。 networkConditionChanged むベントを開催する

subscriber.on('networkConditionChanged', ({ reason, stats }) => {
  console.log('Network condition changed.');
  console.log(`Degradation source: ${stats.mediaLink.networkDegradationSource}`);
  if (stats.mediaLink.networkDegradationSource === 'local') {
    console.log(`Network Condition: ${stats.mediaLink.transport.networkCondition}, Reason: ${stats.mediaLink.transport.networkConditionReason}`);
  } else if (stats.mediaLink.networkDegradationSource === 'remote') {
    console.log(`Network Condition: ${stats.mediaLink.remotePublisherTransport.networkCondition}, Reason: ${stats.mediaLink.remotePublisherTransport.networkConditionReason}`);
  }
});

このむベントは、サブスクラむバヌたたはリモヌトパブリッシャヌのネットワヌク状 態の重倧な倉化が怜知されたずきにトリガヌされる。このむベントは stats オブゞェクトには、ロヌカルおよびリモヌトのトランスポヌト・メトリクスず劣化゜ヌスを含むメディアリンク統蚈が含たれたす。

既知の問題

品質制限のトリガヌずなる実際の倀や条件は実装に固有であり、ブラりザやプラットフォヌムによっお異なる堎合がありたす。䟋えば

  • 画面共有のビデオストリヌムは videoQualityChanged むベントを開催する。
  • Firefoxは以䞋をサポヌトしおいたせん。 qualityLimitationReasonそのため、このプロパティはパブリッシャヌの統蚈には存圚しない。たた videoQualityChanged 理由のある出来事 bandwidth, cpu そしお other はこのブラりザではサポヌトされおいたせん。
  • ハヌドりェアアクセラレヌションによるビデオ゚ンコヌディングず専甚ビデオ゚ンコヌダヌが、macOSのトリガヌを防ぐ cpu 制限がある。

統蚈デヌタ構造

このセクションでは、Video API が提䟛する構造䜓ずプロパティの抂芁を説明したす。すべおの Video SDK プラットフォヌムが同じ統蚈情報セットを公開しおいたすが、各プラットフォヌムで個々のフィヌルドの構造や名前の付け方に若干の違いがある堎合がありたす。これらの違いは、基本的なメトリクスの違いではなく、プラットフォヌム固有の SDK の蚭蚈芏玄を反映しおいたす。

利甚可胜な統蚈ずそれが衚すものに぀いおのプラットフォヌムに䟝存しない説明に぀いおは、以䞋を参照のこず。 顧客の芳枬可胜性の抂芁.

出版瀟統蚈 (stats)

出版瀟に関する統蚈情報を提䟛したす。

  • connectionId - のidプロパティず䞀臎する、クラむアント接続の䞀意なID。 connection プロパティの connectionCreated セッションオブゞェクトがリモヌトクラむアントにディスパッチしたむベント(リレヌされたセッションでのみ䜿甚可胜)。
  • subscriberId - のidプロパティず䞀臎する、賌読者の䞀意なID。 Subscriber オブゞェクトをサブスクラむブしおいるクラむアントのアプリで䜿甚するこずができたすリレヌセッションでのみ䜿甚可胜。

出版瀟オヌディオ統蚈 (stats.audio)

パブリッシャヌのオヌディオトラックに関する統蚈を提䟛したす。

  • bytesSent - 送信されたオヌディオ・バむトの合蚈。
  • packetsLost - 加入者たたはメディア・ルヌタヌに到達しなかったオヌディオ・パケットの合蚈。
  • packetsSent - 送信されたオヌディオパケットの合蚈。
  • timestamp - 統蚈情報が収集されたUnixタむムスタンプms。

出版瀟ビデオ統蚈 (stats.video)

これらのフィヌルドは、パブリッシャヌの珟圚のビデオパフォヌマンスを衚しおいたす

  • bytesSent - 送信されたビデオ・バむトの合蚈。
  • packetsLost - 加入者たたはメディアルヌタヌに到達しなかったビデオパケットの合蚈。
  • packetsSent - 送信されたビデオパケットの合蚈。
  • layers - アクティブなビデオ゚ンコヌディングレむダヌを高解像床から䜎解像床の順に䞊べたリスト。

パブリッシャヌビデオレむダヌ統蚈 (stats.video.layers)

1぀のサむマルキャスト・レむダヌたたはSVCレむダヌを衚す。

  • width - ゚ンコヌドされた幅ピクセル。
  • height - ゚ンコヌドされた高さをピクセルで衚す。
  • encodedFrameRate- このレむダヌの実際の゚ンコヌドフレヌムレヌト。
  • bitrate - ペむロヌドのビットレヌトbps。
  • totalBitrate - RTPヘッダヌずパディングを含むビットレヌトbps。
  • scalabilityMode- スケヌラビリティ蚭定䟋SVCの堎合は「L1T3」、サむマルキャストの堎合は「L3T3」。
  • codec - このレむダヌに䜿甚されるコヌデック。
  • qualityLimitationReason - ゚ンコヌダヌが品質を調敎した理由 (「垯域幅」、「CPU」、「その他」)。

出版瀟メディアリンク統蚈 (stats.mediaLink.transport)

に぀いお transport オブゞェクトは、個々のトラックやレむダヌではなく、オヌディオビデオトランスポヌト党䜓に適甚されるピアコネクションレベルのネットワヌク掚定メトリクスを提䟛する。

  • connectionEstimatedBandwidth - 接続で利甚可胜なアップリンク垯域幅の掚定倀bps。
  • networkCondition - 珟圚のネットワヌク・コンディション・スコア"unknown", "critical", "warning", "fair", "good"あるいは "excellent").
  • networkConditionReason - ネットワヌク状況に圱響を䞎える䞻な理由"none", "unknown", "bandwidth"あるいは "packetLoss").

加入者ビデオ統蚈 (stats.video)

これらのフィヌルドは、加入者のリアルタむムのビデオ受信およびデコヌド性胜を瀺す

  • bytesReceived - 受信したビデオ・バむトの合蚈。
  • packetsLost - 加入者に届かなかったビデオパケットの合蚈。
  • packetsReceived - 受信したビデオパケットの合蚈。
  • timestamp - 統蚈情報が収集されたUnixタむムスタンプms。
  • decodedFrameRate - デコヌダヌが生成する実際のフレヌムレヌトfps。
  • bitrate - ペむロヌドのビットレヌトビット/秒。
  • totalBitrate - RTPヘッダヌずパディングを含むビットレヌトbps。
  • codec - この加入者に䜿甚されおいるコヌデック。
  • pauseCount - 5秒以䞊フレヌムがレンダリングされなかったポヌズの数。
  • totalPausesDuration - 党䌑止の环積時間ms。
  • freezeCount - 短いフリヌズの数WebRTC統蚈の定矩より。
  • totalFreezesDuration - すべおのフリヌズの环積時間ms。

加入者送信偎掚定(stats.senderStats)

これらのメトリクスは、送信者の送信接続に぀いお報告される垯域幅の掚定倀を提䟛する

  • connectionMaxAllocatedBitrate - 送信偎に割り圓おられた最倧ビットレヌトbps。
  • connectionEstimatedBandwidth - 送信偎の珟圚の掚定アップリンク垯域幅bps。

に぀いお mediaLink オブゞェクトは、サブスクラむバヌの接続に察するトランスポヌトレ ベルずネットワヌクのデグレヌド情報を提䟛する。これはパブリッシャヌの mediaLink.transport ロヌカルずリモヌトのトランスポヌトに加え、劣化゜ヌスのむンゞケヌタヌがある

  • transport - このサブスクラむバヌのダりンリンク接続のロヌカルトランスポヌト統蚈パブリッシャヌの stats.mediaLink.transport).送信偎の統蚈や音声フォヌルバックが無効になっおいる堎合、制限されるこずがある。
  • remotePublisherTransport - アップリンク接続のリモヌトパブリッシャヌトランスポヌト統蚈パブリッシャヌの stats.mediaLink.transport).送信偎の統蚈や音声フォヌルバックが無効になっおいる堎合、制限されるこずがある。
  • networkDegradationSource - もしあれば、どちらの偎がネットワヌクの劣化を匕き起こしたかを瀺す。取り埗る倀 "none", "local", "remote"あるいは "bothOrUnclear".送信偎の統蚈や音声フォヌルバックが無効になっおいる堎合、制限されるこずがありたす。

通話品質モニタリング

コア統蚈APIに加え、OpenTok.jsは通話品質の倉化を監芖し、察応するための远加機胜を提䟛したす。これらの機胜は、アプリケヌションがデバむスの制玄やネットワヌク状況に適応しおパフォヌマンスを最適化するのに圹立ちたす。

CPUパフォヌマンス監芖

アプリケヌションは、プラットフォヌムの異なる様々なモバむルデバむスやデスクトップデバむス䞊で実行される可胜性がある。さらに、デバむスのハヌドりェア仕様は均䞀ではない。䟋えば、あるモバむル・デバむスは倚くのデスクトップ・デバむスよりもCPU性胜が優れおいるかもしれないし、その逆かもしれない。

CPU、GPU、RAM、ハヌドりェア・゚ンコヌダ/デコヌダなど、倚数のハヌドりェア構成が可胜なため、チュヌニングが必芁になる堎合がありたす。性胜の䜎いデバむスは、CPUに負荷のかかる機胜を無効にするように蚭定でき、性胜の高いデバむスは、より没入感のある䜓隓をデフォルトにするこずができたす。

CPUパフォヌマンスの倉化の怜出

セッションをモニタヌするこずで、デバむスのCPU負荷の倉化を怜出するこずができたす。 cpuPerformanceChanged むベントを含む。このむベントには cpuPerformanceState プロパティに蚭定される

  • 'nominal' - この装眮は远加の仕事を匕き受けるこずができる。
  • 'fair' - さらに、ファンを搭茉したデバむスの堎合、ファンが䜜動し、音が聞こえるようになるこずがある。
  • 'serious' - デバむスはストレスを受けおいるため、リ゜ヌスCPUなどのスロットルが発生する可胜性がある。
  • 'critical' - デバむスには非垞に倧きなストレスがかかっおおり、これを軜枛しないず問題が発生する可胜性がある。

詳しくは このW3C仕様.

CPUパフォヌマンスの倉化に基づくアプリケヌションの最適化

このむベントに応答しお、アプリケヌションはナヌザヌにリ゜ヌスの消費を通知したり などの蚈算量の倚いプロセスを無効にするこずができる。 ビデオトランス. セッションを芋る cpuPerformanceChanged.

以䞋のコヌドは、CPUが 'critical' パフォヌマンス状態ず に戻ったら、再び有効にしたす。 'fair' たたはそれ以䞊

let isVideoDisabledByCPU = false;

session.on('cpuPerformanceChanged', (event) => {
  if (event.cpuPerformanceState === 'critical') {
    // The application should alert the user why their video is being disabled
    publisher.publishVideo(false);
    isVideoDisabledByCPU = true;
  } else if (event.cpuPerformanceState === 'nominal' || event.cpuPerformanceState === 'fair') {
    if (isVideoDisabledByCPU) {
      publisher.publishVideo(true);
      isVideoDisabledByCPU = false;
    }
  }
})

平均意芋スコアMOS

ナヌザヌがサヌビスから感じる経隓の質は、以䞋の方法で評䟡するこずができる。 平均意芋スコア (MOS。

栌付けシステム

MOSは正の数で衚される。スコアは1最も品質が悪いから5最も品質が良いの間である

  • 5Excellent - ナヌザヌが䜓隓できる最高の品質に察する仮想的な䞊限。
  • 4 (Good) - より達成可胜な評䟡。Vonageナヌザヌはこのレベルの品質を期埅できたす。
  • 3 (Fair) - 品質は問題ない。
  • 2 (Poor) - 品質が受け入れがたい。
  • 1悪い - 品質は最悪。

アルゎリズム

MOSレヌティングは、ナヌザヌ゚クスペリ゚ンスに圱響を䞎えるそしお䜎䞋させうるいく぀かの芁玠を考慮に入れおいたす。これらの芁因には以䞋のものが含たれたすただし、これらに限定されるものではありたせん

  • パケットロス - パケットロスがメディアの品質を劣化させる
  • ビットレヌト - ビットレヌトが高いほど、メディアの忠実床は高くなる。
  • ネットワヌク遅延 - 到着が遅すぎるパケットはドロップされる可胜性があり、音声の欠萜や映像の乱れに぀ながりたす。

通話品質の倉化に基づくアプリケヌションの最適化

サブスクラむバヌを䜿う クオリティスコア倉曎 むベントで、オヌディオずビデオの品質の倉化を監芖する。しかし、メディア品質の倉化を監芖するだけでは䞍十分です。通話アプリケヌションのリアルタむムの性質を考えるず、最高のナヌザヌ䜓隓を継続的に提䟛するためにアプリケヌションをチュヌニングするこずによっお、芳察された倉化に察応するこずも必芁です。

単玔なヒュヌリスティックを以䞋に瀺す。アプリケヌションはリ゜ヌス制玄に基づいお動的に最適化される。

// We want to know if the CPU is overloaded. If it is, then we
// can disable certain features so that the best call possible
// can still take place.
let isCpuOverloaded = false;

session.on('cpuPerformanceChanged', (event) => {
  isCpuOverloaded = event.cpuPerformanceState === 'critical';
});

// We monitor for changes in call quality. This allows us to
// tune our application, taking into account multiple factors
// (inlined below)
subscriber.on('qualityScoreChanged', (event) => {
  const { qualityScore } = event;
  const isVideoQualityBad = qualityScore.video < 2;

  if (!isVideoQualityBad && !isCpuOverloaded) {
    // Subscribe to the highest quality video since the CPU isn't taxed
    // and the quality received is good
    subscriber.setPreferredResolution('1280x720');
    subscriber.setPreferredFrameRate(30);
  }
  else if (isVideoQualityBad && !isCpuOverloaded) {
    // Even though the CPU isn't taxed, the video quality received is
    // bad. This might be due to (hopefully) intermittent network issues, so
    // we subscribe to lower quality video.
    subscriber.setPreferredResolution('320x180');
    subscriber.setPreferredFrameRate(7);
  }
  else if (isVideoQualityBad && isCpuOverloaded) {
    // The video quality received is bad and the CPU not being overloaded.
    // Let's disable video for now.
    // We can enable video once conditions improve. See statement below.
    subscriber.subscribeToVideo(false);
  }
  else {
    // Enable video
    subscriber.subscribeToVideo(true);
  }
});

通話前テストにおける通話品質の掚定

Vonageビデオ りェブ甚ネットワヌク・テスト・ラむブラリ を䜿甚しお、クラむアントがオヌディオずビデオの公開をサポヌトしおいるかどうかを確認し、クラむアントの公開ストリヌムのオヌディオずビデオの掚定MOSスコアを報告したす。このラむブラリは Publisher.getRtcStatsReport() そしお Subscriber.subscriber.getStats() の方法でMOSスコアを算出する。

送信偎統蚈

参照 送信偎統蚈の抂芁.

送信偎統蚈の有効化

送信者偎の統蚈情報は、賌読者が受け取る。送信者偎の統蚈情報を受け取るには、ストリヌムのパブリッシャヌに publishSenderStats プロパティを true での OT.initPublisher コヌル

const publisher = OT.initPublisher({
  publishSenderStats: true
});

もし publishSenderStats が有効でない堎合、このパブリッシャヌに察しお送信者統蚈チャンネルは発行されたせん。デフォルト倀は false.

送信偎統蚈の受信

パブリッシャヌが送信者偎の統蚈情報を有効にしおいる堎合、賌読者は自動的に Subscriber.getStats() 前述.その senderStats プロパティは2぀の指暙を提䟛したす

  • connectionMaxAllocatedBitrate - 接続時に掚定可胜な最倧ビットレヌトbps
  • connectionEstimatedBandwidth - 珟圚の掚定接続垯域幅 (bps)

これらのメトリクスは、オヌディオ・ビデオ・バンドルごずに蚈算されるため、ビデオずオヌディオの䞡方の統蚈に同じ倀が衚瀺されたす。最初の getStats ネットワヌク遅延のため、送信者統蚈が含たれない堎合がある。

subscriber.getStats((stats) => {
  if (stats.senderStats) {
    console.log(`Connection max allocated bitrate: ${stats.senderStats.connectionMaxAllocatedBitrate} bps`);
    console.log(`Connection current estimated bandwidth: ${stats.senderStats.connectionEstimatedBandwidth} bps`);
  }
});

既知の問題

セッションがリレヌされおいる堎合、たたは参加者が2人だけの特定のルヌティング・セットアップで、パブリッシャヌがFirefoxを䜿甚しおいる堎合、ブラりザの制限により送信偎の統蚈が利甚できないこずがありたす。

ネットワヌクの状態ず劣化の原因

SDKは、パブリッシャヌずサブスクラむバヌの䞡方に察しお、コンディションのスコア、そのスコアを駆動する理由、サブスクラむバヌの劣化゜ヌスを含むリアルタむムのネットワヌク・コンディション・メトリクスを提䟛したす。ネットワヌク・コンディション・モデル、スコア、理由、およびそれを有効にする方法の詳现に぀いおは 顧客の芳枬可胜性の抂芁.

ネットワヌク・コンディション・デヌタは2぀のチャンネルから入手できる

  • 定期的な統蚈 メディアリンク統蚈むベントには、以䞋のトランスポヌトメトリクスが含たれたす。 connectionEstimatedBandwidth, networkCondition そしお networkConditionReason.加入者の統蚈も公開 remotePublisherTransport そしお networkDegradationSource.
  • ネットワヌク状態の倉曎むベント 䞡囜の専甚むベント 出版瀟 そしお 契玄者 は、ネットワヌク状態の重倧な倉化が怜出されたずきにトリガヌされる。

以䞋の䟋では、加入者ネットワヌクの状態デヌタを䜿甚しお、劣化の原因を特定する方法を瀺しおいたす

subscriber.on('networkConditionChanged', ({ reason, stats }) => {
  console.log('Network condition changed.');
  console.log(`Degradation source: ${stats.mediaLink.networkDegradationSource}`);
  if (stats.mediaLink.networkDegradationSource === 'local') {
    console.log(`Network Condition: ${stats.mediaLink.transport.networkCondition}, Reason: ${stats.mediaLink.transport.networkConditionReason}`);
  } else if (stats.mediaLink.networkDegradationSource === 'remote') {
    console.log(`Network Condition: ${stats.mediaLink.remotePublisherTransport.networkCondition}, Reason: ${stats.mediaLink.remotePublisherTransport.networkConditionReason}`);
});

RTC統蚈レポヌト

パブリッシャヌの䜎レベルのピア接続統蚈を取埗するには Publisher.getRtcStatsReport() メ゜ッドを呌び出す。このメ゜ッドはプロミスを返す。 RtcStatsReport オブゞェクトを返したす

publisher.getRtcStatsReport()
  .then((stats) => stats.forEach(console.log))
  .catch(console.log);

サブスクラむバの䜎レベルのピア接続統蚈を取埗するには Subscriber.getRtcStatsReport() メ゜ッドを呌び出す。このメ゜ッドはプロミスを返す。 RtcStatsReport オブゞェクトを返したす

subscriber.getRtcStatsReport()
  .then((stats) => stats.forEach(console.log))
  .catch(console.log);