購読するマネジメント&イベント

このガイドでは、サブスクライバーの挙動の管理と、実行時のイベントへの対応について解説します。

サブスクライバー・ストリームの管理(React Native)

ストリームのビデオ・ディメンションが変更されたときの検出

モバイルデバイスから配信されているストリームのサイズが変更された場合(例えば、デバイスの向きが変わった場合など)、または画面共有のソースウィンドウのサイズが変更された場合、ストリームの動画サイズが変わる可能性があります。

ストリームの動画サイズが変更されると、 Session オブジェクトは streamPropertyChanged イベント、~と共に changedProperty に設定する。 videoDimensions.

<OTSubscriber
  eventHandlers={{
    streamVideoDimensionsChanged: (event) => {
      console.log('stream video dimensions changed -- stream ID:', event.streamId);
      console.log('new dimensions:', event.width, 'x', event.height);
    },
  }}
/>

好ましいフレームレートと解像度の設定

を使用するストリームを購読する際は、 スケーラブルビデオ この機能では、次のように設定できます preferredResolution への 'auto' 加入者の動画解像度を自動的に管理し、CPUおよびネットワークの使用率を最適化するため。

高度な制御を行うには、購読しているストリームの希望するフレームレートと解像度を設定してください:

<OTSubscriber
  properties={{
    preferredFrameRate: 15,
    preferredResolution: { width: 640, height: 480 },
  }}
/>

これらはあくまでヒントであり、命令ではありません。メディアルーターは、加入者の実際のネットワーク状況に合致する、利用可能なレイヤーのうち最も近いものを選択します。これらは以下の状況では効果を発揮しません。 リレーセッション、スケーラブルビデオが無効になっている場合、またはネゴシエーションの結果としてH.264がコーデックとして決定された場合。大規模なセッションにおけるリソース使用量を削減するその他の手法については、 単一ピア接続ガイド.

ストリームがセッションから離れるのを検知する

リモートストリームがセッションから離脱すると、 OTSubscriber コンポーネントは streamDestroyed イベント。このイベントには、次のような詳細が含まれています。 streamId, name, reason, hasAudio, hasVideoそして videoType. イベントの詳細およびその reason 値については、 診断ガイドを購読する.

<OTSubscriber
  eventHandlers={{
    streamDestroyed: (event) => {
      console.log('Stream stopped. Reason: ' + event.reason);
    },
  }}
/>

購読者のカスタムレンダリング

デフォルトでは OTSubscriber 購読動画の子ビューをレンダリングします。また、レンダリング関数を指定することで、レンダリングを完全に制御することもできます。 renderView:

<OTSubscriber
  renderView={(streamId) => (
    <View style={styles.subscriberTile}>
      <OTSubscriberView streamId={streamId} style={styles.video} />
    </View>
  )}
/>

ストリーム・プロパティの設定

すべてのサブスクライバーに対して、以下の方法を通じてグローバルプロパティを設定します。 subscriberProperties 支える OTSession、または properties 支える OTSubscriber. 利用可能な物件の完全なリストについては、 OTSubscriber API リファレンス.

// Global defaults for all subscribers in the session
<OTSession
  subscriberProperties={{
    subscribeToAudio: true,
    subscribeToVideo: true,
  }}
/>

// Per-stream override
<OTSubscriber
  properties={{
    subscribeToAudio: true,
    subscribeToVideo: false,
  }}
/>

購読者ストリームの管理 (iOS Swift)

iOSで購読者を管理し、イベントを処理し、プリファレンスを調整します。

加入者のビデオが無効になっていることを検出する

func subscriberVideoDisabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
    print("subscriber video disabled.")
}

考えられる理由

  • OTSubscriberVideoEventPublisherPropertyChanged
  • OTSubscriberVideoEventQualityChanged
  • OTSubscriberVideoEventSubscriberPropertyChanged

ビデオが再開されたら

func subscriberVideoEnabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
    print("subscriber video enabled.")
}

ストリームに関する情報の取得

について OTStream オブジェクトが含まれる:

  • connection - 出版とのつながり
  • creationTime - タイムスタンプ
  • hasAudio - ブール
  • hasVideo - ブール
  • name - 任意のストリーム名
  • session - 関連セッション
  • streamId - ユニークID
  • videoDimensions - CGSサイズ
  • videoType - カメラ、スクリーン、カスタム

統計情報は OTSubscriberKitNetworkStatsDelegate.

参照 顧客観察可能性ガイド をご覧ください。

好ましいフレームレートと解像度の設定

スケーラブルなビデオストリームの場合、設定することができます:

  • SubscriberKit.preferredFrameRate
  • SubscriberKit.preferredResolution

サブスクライバーストリームの管理(JavaScript)

購読ストリームのフレームレートを制限する

また、サブスクライバーの動画ストリームのフレームレートを制限することもできます。

加入者のフレームレートを制限するには、 restrictFrameRate() Subscriber オブジェクトのメソッドを呼び出し、 true:

subscriber.restrictFrameRate(true);

パス・イン false また、動画ストリームのフレームレートに制限はありません:

subscriber.restrictFrameRate(false);

フレームレートが制限されている場合、加入者の動画フレームは1秒に1回以下しか更新されません。この機能は、以下の環境でのみ利用可能です。 ルーティングセッション. リレーされたセッションでは、このメソッドを呼び出しても何の効果もありません。

加入者のフレームレートを制限することには、次のような利点がある:

  • CPUの使用率を減らすことができる。
  • アプリが消費するネットワーク帯域幅を削減します。
  • より多くのストリームを同時に購読できる。

加入者のフレームレートを下げても、他のクライアントでの動画のフレームレートには影響しません。大規模なセッションにおけるリソース使用量を削減するその他の手法については、 単一ピア接続ガイド.

加入者のオーディオがブロックまたはブロック解除された場合の検出

一部のブラウザでは、ユーザーがページを操作するまで、音声の再生が自動的にブロックされます。ブロックされた音声への対応(デフォルトの再生ボタンを無効にしたり、独自の UI を表示したりする方法など)の完全な実装については、以下を参照してください。 加入者オーディオがブロックされている場合にカスタムUI要素を表示する.

また、加入者には以下のものが含まれます。 isAudioBlocked() 以下を返すメソッド true 音声が遮断された場合、または false そうでない場合は。

加入者のビデオが無効になっていることを検出する

購読者の動画が無効化されると、Subscriber オブジェクトは videoDisabled イベント。メディアルーターが加入者の動画を無効にした場合、その加入者に関連するユーザーインターフェースを調整する必要がある場合があります。

について reason プロパティの videoDisabled eventオブジェクトは、動画が無効化された理由を定義します('publishVideo', 'quality'あるいは 'subscribeToVideo'). 各理由の詳細については、 診断ガイドを購読する. 動画が以下の理由で無効化される前に quality、加入者は videoDisableWarning イベント。画質が原因でストリームの動画が再生できなくなるのを防ぐには、 加入者向け音声フォールバックガイド.

subscriber.on('videoDisableWarning', () => {
  showConnectionWarning(subscriber.id);
});

subscriber.on('videoDisableWarningLifted', () => {
  hideConnectionWarning(subscriber.id);
});

subscriber.on('videoDisabled', (event) => {
  if (event.reason === 'quality') {
    showVideoDisabledOverlay(subscriber.id);
  }
});

subscriber.on('videoEnabled', () => {
  hideVideoDisabledOverlay(subscriber.id);
});

デフォルトでは、サブスクライバーは、以下の場合に独自の「動画再生不可」インジケーターを表示します。 quality その理由はここにあります。独自のUIに置き換えるには、次のように設定してください。 style.videoDisabledDisplayMode への 'off' 購読オプション内で。コーデック固有の動作(例:H.264ストリームが品質ベースのフォールバックの影響を受けない理由など)については、 ビデオコーデックガイド.

購読者統計の取得(ウェブ)

について getStats() Subscriber オブジェクトのこのメソッドは、サブスクライバーのストリームに関する情報を提供します。利用可能なフィールドの完全な一覧については、 診断ガイドを購読する.

以下のコードでは、ロス率とビットレートを1秒ごとに記録している:

window.setInterval(() => {
  subscriber.getStats((error, stats) => {
    if (error) {
      console.error('Error getting subscriber stats:', error.message);
      return;
    }
    if (stats.video) {
      console.log('video bitrate:', stats.video.bitrate, 'bps');
      const total = stats.video.packetsLost + stats.video.packetsReceived;
      console.log('video packet loss ratio:', total > 0 ? stats.video.packetsLost / total : 0);
    }
    if (stats.audio) {
      console.log('audio bitrate:', stats.audio.bitrate, 'bps');
    }
  });
}, 1000);

ローカルクライアントによって公開されたストリームの統計情報を取得するには、ルーティングされたセッションを使用し、 testNetwork オプションで true 購読の際:

const subscriber = session.subscribe(stream, 'container', {
  testNetwork: true,
});

より詳細なストリーム統計情報を取得するには、以下を使用してください。 subscriber.getRtcStatsReport(). 利用可能なすべてのフィールドの詳細については、 クライアントの可観測性ガイド.

好みのフレームレートと解像度を設定する(ウェブ)

を使用するストリームを購読する際は、 スケーラブルビデオ この機能では、次のように設定できます preferredResolution への 'auto' 加入者の動画解像度を自動的に管理し、CPUおよびネットワークの使用率を最適化します。これらのヒントの仕組み、サポートされている値、および制限事項に関する詳細については、 スケーラブルなビデオガイド.

セット preferredResolution そして preferredFrameRate に渡しするオプションの中で Session.subscribe() (または、 Subscriber.setPreferredResolution() そして Subscriber.setPreferredFrameRate() (購読後):

// Set at subscribe time using 'auto' (recommended)
const subscriber = session.subscribe(stream, 'container', {
  preferredResolution: 'auto',
});

// Or set explicitly after subscribing
subscriber.setPreferredResolution({ width: 1280, height: 720 });
subscriber.setPreferredFrameRate(30);

// Downgrade for a thumbnail tile
subscriber.setPreferredResolution({ width: 320, height: 240 });
subscriber.setPreferredFrameRate(7);

加入者ストリームの管理(Android)

Androidで購読者を管理し、イベントを処理し、プリファレンスを調整します。

加入者のビデオが無効になっていることを検出する

ビデオが無効の場合:

override fun onVideoDisabled(subscriber: SubscriberKit, reason: String) {
    // Video disabled
}

ビデオが再開されたら

override fun onVideoEnabled(subscriber: SubscriberKit, reason: String) {
    // Video resumed
}

について reason パラメータは、その変更がなぜ起こったかを説明する。

ストリームに関する情報の取得

について Stream オブジェクトが提供する:

  • getConnection() - 接続オブジェクト
  • getCreationTime() - 作成タイムスタンプ
  • hasAudio() - ブーリアン
  • hasVideo() - ブーリアン
  • getName() - ストリーム名
  • getStreamId() - ユニークID
  • getVideoHeight() - ピクセル単位の高さ
  • getVideoWidth() - 幅(ピクセル
  • getVideoType() - カメラ、スクリーン共有、カスタム

また、統計をモニターすることもできる:

  • setAudioStatsListener()
  • setVideoStatsListener()
  • setMediaLinkStatsListener()
  • getRtcStatsReport()

好ましいフレームレートと解像度の設定

スケーラブルなビデオストリームでは、環境設定を行うことができます:

  • SubscriberKit.setPreferredFrameRate()
  • SubscriberKit.setPreferredResolution()

加入者ストリームの管理(Windows)

購読者の管理、イベントの処理、Windowsの環境設定の調整。

加入者のビデオが無効になっていることを検出する

OpenTok Media Router は、ネットワークの状態が悪化した場合、ビデオの送信を停止することがあります。

利用可能であれば、加入者は音声の受信を継続する。

ビデオが無効の場合 Subscriber オブジェクトは VideoDisabled イベントを開催する:

subscriber.VideoDisabled += Subscriber_VideoDisabled;

public void Subscriber_VideoDisabled(object sender)
{
    // Display a user interface notification.
}

ビデオが再開されたら

subscriber.VideoEnabled += Subscriber_VideoEnabled;

public void Subscriber_VideoEnabled(object sender)
{
    // Video resumes for the subscriber.
}

これらのイベントに応じてUIを調整したい場合もあるだろう。

ストリームに関する情報の取得

について Stream オブジェクトは以下のプロパティを公開している:

  • Connection - 出版とのつながり
  • CreationTime - ストリーム作成タイムスタンプ
  • HasAudio - ストリームに音声があるかどうか
  • HasVideo - ストリームにビデオがあるかどうか
  • Name - ストリーム名
  • Id - ユニークなストリームID
  • Height - ビデオの高さ(ピクセル
  • Width - ビデオ幅(ピクセル
  • VideoSourceType - カメラ、スクリーン共有、またはカスタムソースタイプ

可能 VideoSourceType 価値観の違いだ:

  • VideoSourceType.StreamVideoTypeCamera
  • VideoSourceType.StreamVideoTypeScreen
  • VideoSourceType.StreamVideoTypeCustom

モニタリング統計

これらのイベントを使用して、ストリームの統計を監視する:

  • Subscriber.AudioStatsUpdated
  • Subscriber.VideoStatsUpdated
  • Subscriber.MediaLinkStatsUpdated

低レベルのRTC統計を取得する:

subscriber.GetRtcStatsReport();

好ましいフレームレートと解像度の設定

スケーラブル・ビデオ機能を使用するストリームについては、設定を行う:

  • Subscriber.PreferredFramerate
  • Subscriber.PreferredResolution

加入者ストリームの管理(Linux)

Linuxで購読者の管理、イベントの処理、環境設定の調整を行う。

ストリームのビデオが無効になっていることを検出する

について on_stream_has_video_changed のコールバック関数である。 otc_session_callbacks struct は、ストリームのビデオの可用性が変更されたときに呼び出される。

について stream パラメータは otc_stream 構造体

使用する:

otc_stream_get_id(stream)

でストリームIDを取得する。

ストリームに関する情報の取得

ストリーム情報を取得するには、以下の関数を使用する:

  • otc_stream_get_connection() - パブリッシング接続を返します。
  • otc_stream_get_creation_time() - ストリームの作成タイムスタンプを返します。
  • otc_stream_has_audio() - ストリームがオーディオを公開しているかどうか
  • otc_stream_has_video() - ストリームがビデオを公開しているかどうか
  • otc_stream_has_audio_track() - ストリームにオーディオトラックがあるかどうか
  • otc_stream_has_video_track() - ストリームにビデオトラックがあるかどうか
  • otc_stream_get_name() - ストリーム名を返す
  • otc_stream_get_id() - 一意のストリーム ID を返します。
  • otc_stream_get_video_height() - 動画の高さをピクセル単位で返します。
  • otc_stream_get_video_width() - 動画の幅をピクセル単位で返します。
  • otc_stream_get_video_type() - ストリームのビデオタイプを返します。

可能なビデオタイプ:

  • OTC_STREAM_VIDEO_TYPE_CAMERA
  • OTC_STREAM_VIDEO_TYPE_SCREEN

モニタリング統計

これらの加入者コールバック関数を使用する:

  • on_audio_stats()
  • on_video_stats()
  • on_media_link_stats()

低レベルのRTC統計を取得するには、以下を使用する:

otc_subscriber_get_rtc_stats_report()

好ましいフレームレートと解像度の設定

スケーラブル・ビデオ機能を使用するストリームでは、フレームレートと解像度を設定することができます:

  • otc_subscriber_set_preferred_framerate()
  • otc_subscriber_set_preferred_resolution()