購読するマネジメント&イベント
このガイドでは、サブスクライバーの挙動の管理と、実行時のイベントへの対応について解説します。
サブスクライバー・ストリームの管理(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 },
}}
/>
ストリームがセッションから離れるのを検知する
リモートストリームがセッションから離脱すると、 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.")
}
考えられる理由
OTSubscriberVideoEventPublisherPropertyChangedOTSubscriberVideoEventQualityChangedOTSubscriberVideoEventSubscriberPropertyChanged
ビデオが再開されたら
func subscriberVideoEnabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
print("subscriber video enabled.")
}
ストリームに関する情報の取得
について OTStream オブジェクトが含まれる:
connection- 出版とのつながりcreationTime- タイムスタンプhasAudio- ブールhasVideo- ブールname- 任意のストリーム名session- 関連セッションstreamId- ユニークIDvideoDimensions- CGSサイズvideoType- カメラ、スクリーン、カスタム
統計情報は OTSubscriberKitNetworkStatsDelegate.
参照 顧客観察可能性ガイド をご覧ください。
好ましいフレームレートと解像度の設定
スケーラブルなビデオストリームの場合、設定することができます:
SubscriberKit.preferredFrameRateSubscriberKit.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()- ユニークIDgetVideoHeight()- ピクセル単位の高さ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- ユニークなストリームIDHeight- ビデオの高さ(ピクセルWidth- ビデオ幅(ピクセルVideoSourceType- カメラ、スクリーン共有、またはカスタムソースタイプ
可能 VideoSourceType 価値観の違いだ:
VideoSourceType.StreamVideoTypeCameraVideoSourceType.StreamVideoTypeScreenVideoSourceType.StreamVideoTypeCustom
モニタリング統計
これらのイベントを使用して、ストリームの統計を監視する:
Subscriber.AudioStatsUpdatedSubscriber.VideoStatsUpdatedSubscriber.MediaLinkStatsUpdated
低レベルのRTC統計を取得する:
subscriber.GetRtcStatsReport();
好ましいフレームレートと解像度の設定
スケーラブル・ビデオ機能を使用するストリームについては、設定を行う:
Subscriber.PreferredFramerateSubscriber.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_CAMERAOTC_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()