UIのカスタマイズ — iOS (Swift)
OpenTokの動画のユーザーインターフェースをカスタマイズするために、以下の設定を行うことができます:
- 公開ストリームに名前を追加する
- パブリッシャーにミュートボタンを追加する
- 加入者にミュートボタンを追加する
- パブリッシャーのカメラを切り替えるボタンの追加
- ビデオの有効/無効時のユーザーインターフェースの調整
- セッションがアーカイブされているときにインジケータ要素を表示する
- ビデオのスナップショット画像を取得する
- オーディオレベルに応じてユーザーインターフェースを調整
- カスタムビデオレンダラの使用
公開ストリームに名前を追加する
公開ストリームのnameプロパティを指定するには name プロパティを使用します:
let publisherSettings = OTPublisherSettings()
publisherSettings.name = "Juan"
let publisher = OTPublisher(delegate: self, settings: publisherSettings)
OTStream クラスは name プロパティあなたが ストリームを購読するこの名前をユーザー インターフェイス要素に表示できます。(また、この名前は、OpenTok.js ライブラリを使用する Web ページで動画を表示する場合にも表示されます)。
出版社の「名前」欄に個人情報を使用しないこと — パブリッシャー名は、セッションの他の参加者に公開される可能性があり、またインスペクターツールやVonageの内部ログにも表示される可能性があるため、パブリッシャー名には、暗号化されていない機密情報や個人情報を決して使用しないでください。 セキュリティのベストプラクティスを参照してください.
パブリッシャーにミュートボタンを追加する
パブリッシャーのマイクをミュートするデフォルトのユーザーインターフェース要素はありません。しかし、ボタンなどの要素を追加して publishAudio プロパティを設定します。プロパティを設定します。 publishAudio プロパティ false をミュートしてください:
publisher.publishAudio = false
を設定する。 publishAudio プロパティ true オーディオを公開する。
publisher.publishAudio = true
例については、OpenTok iOS SDKのsamplesディレクトリにある「Project 4: Overlay Graphics」サンプル(または opentok-ios-sdk-samples (GitHub上のリポジトリ)。
加入者にミュートボタンを追加する
加入者の音声をミュートするデフォルトのユーザーインターフェイス要素はありません。ただし、ボタンなどの要素を追加して subscribeToAudio ユーザがクリックしたときに OTSubscriber オブジェクトのオブジェクトに subscribeToAudio プロパティ false 加入者をミュートする
subscriber.subscribeToAudio = false
を設定する。 subscribeToAudio プロパティ true オーディオストリームがある場合)オーディオを購読する:
subscriber.subscribeToAudio = true
例については、OpenTok iOS SDKのsamplesディレクトリにある「Project 4: Overlay Graphics」サンプル(または opentok-ios-sdk-samples (GitHub上のリポジトリ)。
パブリッシャーのカメラを切り替えるボタンの追加
パブリッシャーが使用するカメラを切り替えるデフォルトのユーザーインターフェース要素はありません。しかし、ボタンなどの要素を追加して cameraPosition プロパティを設定します。このプロパティに AVCaptureDevicePosition 列挙型で定義された値を設定します。例えば、以下のコードではパブリッシャーが背面カメラを使用するように設定しています:
publisher.cameraPosition = .back
に注意してほしい。 cameraPosition プロパティは OTPublisherKit クラスでは使用できません。OTPublisherKit クラスで カスタムビデオキャプチャーの実装カスタムビデオキャプチャコードで使用するカメラを定義することができます。
例については、OpenTok iOS SDKのsamplesディレクトリにある「Project 4: Overlay Graphics」サンプル(または opentok-ios-sdk-samples (GitHub上のリポジトリ)。
ビデオの有効/無効時のユーザーインターフェースの調整
加入者のビデオが無効になっている場合 OTSubscriberKitDelegate subscriberVideoDisabled(_:reason:) メッセージが送信されます。この場合、ユーザー・インターフェース要素(アイコンなど)を追加して、ビデオが無効であることを示すことができます:
func subscriberVideoDisabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
// Display the video disabled indicator
}
加入者のビデオが再び有効になると OTSubscriberKitDelegate subscriberVideoEnabled(_:reason:) メッセージが送信されます。この場合、ビデオが再び有効になったことを示すユーザーインターフェイス要素(アイコンなど)を削除することができます:
func subscriberVideoEnabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
// Remove the video disabled indicator
}
を使用するセッションでは OpenTok メディアルーター (メディアモードがルーティングに設定されているセッション)では、以下のメッセージも送信できる:
- OTSubscriberKitDelegate subscriberVideoDisableWarning(_:) — OpenTok Media Router は、ストリームの画質が低下したと判断しました。画質がさらに低下した場合は、動画の再生が停止されます。
- OTSubscriberKitDelegate subscriberVideoDisableWarningLifted(_:) — OpenTok Media Router は、ストリームの品質が改善され、動画の配信停止が差し迫ったリスクとはならないレベルに達したと判断しました。
また、これらのメッセージが送信されたときに、ユーザーインターフェイスの通知(アイコンなど)を表示したり、削除したりすることもできます。
例については、OpenTok iOS SDKのsamplesディレクトリにある「Project 4: Overlay Graphics」サンプル(または opentok-ios-sdk-samples (GitHub上のリポジトリ)。
PublisherKit オブジェクトをインスタンス化する際、パブリッシャーおよびサブスクライバーのオーディオフォールバックを有効または無効にする点に注意してください。オーディオフォールバック機能は、ネットワークや CPU の状況により動画の再生が不可能な場合、パブリッシャーおよびサブスクライバーにおける動画を無効にします。詳しくは オーディオのフォールバック(iOS Swift).
パブリッシャーのオーディオフォールバックを有効にすると、 PublisherKitDelegate オブジェクトはパブリッシャーオーディオのフォールバック関連のイベントに関して以下のメッセージを送信します:
OTPublisherKitDelegate publisherVideoDisabled(_:reason:)OTPublisherKitDelegate publisherVideoEnabled(_:reason:)OTPublisherKitDelegate publisherVideoDisableWarning(_:)OTPublisherKitDelegate publisherVideoDisableWarningLifted(_:)
これらのイベントに応じて、UIインジケーターを表示することができます。
セッションがアーカイブされているときにインジケータ要素を表示する
セッションのアーカイブが録画を開始するとき(あるいは録画中のセッションに接続するとき)には OTSessionDelegate session(_:archiveStartedWithId:name:) メッセージが送信される。録音が停止すると OTSessionDelegate session(_:archiveStoppedWithId:) メッセージが送信されます。OTPublisherビューに表示されるアイコンなど、録画中であることを示すユーザーインターフェイス要素を追加できます:
func session(_ session: OTSession, archiveStartedWithId archiveId: String, name: String?) {
// Display the archive indicator
}
func session(_ session: OTSession, archiveStoppedWithId archiveId: String) {
// Hide the archive indicator
}
例については、OpenTok iOS SDKのsamplesディレクトリにある「Project 5: Multi-Party-Call」サンプル(または opentok-ios-sdk-samples (GitHub上のリポジトリ)。
ビデオのスナップショット画像を取得する
以下のコードでは、Publisherビデオの静止画像をキャプチャして表示し、それをメイン・ビューに追加して、その画像にUIImageオブジェクトを設定しています:
if let publisherView = publisher.view,
let screenCapture = publisherView.snapshotView(afterScreenUpdates: true) {
self.view.addSubview(screenCapture)
UIGraphicsBeginImageContextWithOptions(publisherView.bounds.size, false, UIScreen.main.scale)
view.drawHierarchy(in: publisherView.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
次のコードは、加入者ビデオの静止画像をキャプチャして表示し、それをメインビューに追加して、その画像に UIImage オブジェクトを設定します:
if let subscriberView = subscriber?.view,
let screenCapture = subscriberView.snapshotView(afterScreenUpdates: true) {
self.view.addSubview(screenCapture)
UIGraphicsBeginImageContextWithOptions(subscriberView.bounds.size, false, UIScreen.main.scale)
view.drawHierarchy(in: subscriberView.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
出版社に関する高解像度の画像を取得する例については、 OpenTok iOS サンプルリポジトリ. このサンプルは、OpenTok iOS SDKのsamplesディレクトリにも含まれています。
オーディオレベルに応じてユーザーインターフェースを調整
について OTPublisherKitAudioLevelDelegate publisher(_:audioLevelUpdated:) そして OTSubscriberKitAudioLevelDelegate subscriber(_:audioLevelUpdated:) メッセージは定期的に送信され、サブスクライバーとパブリッシャーの音声レベルが表示されます。メッセージは audioLevel オーディオレベルメーターの表示を更新するための値。
例については、OpenTok iOS SDKのsamplesディレクトリにある「Project 6: Audio Levels」サンプル(または opentok-ios-sdk-samples (GitHub上のリポジトリ)。
注: パブリッシャーのオーディオレベルは、そのストリームがセッションに公開されるまでは利用できません。パブリッシャーがセッションへのストリーミングを開始する前にオーディオをプレビューするには、 カスタムオーディオドライバ.
デフォルトでは、プライバシー保護のため、全てのパブリッシャーがミュートされると、オーディオキャプチャは停止され、マイクは解放されます。これはパブリッシャーインスタンスが再び音声を有効にするまで音声レベルの更新が行われないことを意味します。バージョン 2.31.0 以降では、パブリッシャーはミュート中でもオーディオキャプチャを継続できるようにプロパティが設定されています。
新しいパブリッシャーインスタンスをインスタンス化する際に、開発者はこの動作を有効にすることができます:
let settings = OTPublisherSettings()
settings.allowAudioCaptureWhileMuted = true;
publisher = OTPublisher(delegate: self, settings: settings)!
注意:この動作を有効にすると、パブリッシャーがミュート状態でもマイクが使用されます。
カスタムビデオレンダラの使用
OTPublisher クラスおよび OTSubscriber クラスは、パブリッシャーまたはサブスクライバーの動画をレンダリングするデフォルトの UIView インスタンスを提供します。 OTPublisherKit、OTSubscriberKit、およびOTVideoRenderクラスを使用して、カスタムビデオストリームAPIを通じてカスタムビデオレンダラーを定義することができます。例については、OpenTok iOS SDKのsamplesディレクトリにある「Project 2: Let's Build OTPublisher」サンプル(または opentok-ios-sdk-samples (GitHub上のリポジトリ)。
を使うようにパブリッシャーを設定することもできます。 カスタムビデオキャプチャ.