Vonage Video API iOS SDK のバージョン 2.2 以降への移行
OpenTok iOS SDK をバージョン 2.1.7 からバージョン 2.2 以降へ移行する際には、API の変更、新機能、UI の変更、およびその他の留意点について把握しておく必要があります。
バージョン 2.2 における API の変更点
バージョン 2.2 の新 API
パブリッシャーおよびサブスクライバーオブジェクトにおけるUIの変更点
その他の新機能
バージョン 2.2 における API の変更点
バージョン 2.1.7 から移行する際は、以下の API の変更点に基づいてコードを変更してください。
セッションの初期化 — OTSession オブジェクトの初期化子に、API キーのパラメータが追加されました:
| バージョン 2.1.7 | バージョン2.2 |
|---|---|
[OTSession initWithSessionId: delegate:] |
[OTSession initWithApiKey: sessionId: delegate:] |
セッションへの接続 — セッションに接続するメソッドでは、パラメータとしてAPIキーが指定されなくなりました:
| バージョン 2.1.7 | バージョン2.2 |
|---|---|
[OTSession connectWithApiKey: token:] |
[OTSession connectWithToken: error:] |
なお、新しい error パラメータ。このメソッドの呼び出し中に同期エラーが発生した場合、このパラメータには OTError オブジェクトが設定されます。
バージョン 2.2 において、以下の OTSessionConnectionStatus 列挙定数の名称が変更されました:
| 2.1.7 定数 | 2.2 定数 |
|---|---|
OTSessionConnectionStatusDisconnected |
OTSessionConnectionStatusNotConnected |
ストリームの購読 — バージョン 2.1.7 では、OTSubscriber オブジェクトを初期化すると、直ちにストリームの購読が開始されます。バージョン 2.2 では、OTSubscriber インスタンスを作成した後、 [OTSession subscribe:error:] ストリームの購読を開始する方法:
_subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
OTError* myError = nil;
[_session subscribe:_subscriber error:&myError]
if (myError) {
NSLog(@"subscribe failed with error: (%@)", myError);
}
OTSubscriber クラスは、新しい OTSubscriberKit クラスを継承しています。また、OTSubscriberDelegate プロトコルは、新しい OTSubscriberKitDelegate プロトコルに準拠しています。(参照: バージョン 2.2 の新 API (以下)。
について OTSubscriber.view property は UIView オブジェクトです。(バージョン 2.1.7 では OTVideoView オブジェクトに設定されていましたが、そのクラスは SDK から削除されました。詳しくは パブリッシャーおよびサブスクライバーオブジェクトにおけるUIの変更点.)
SDK バージョン 2.2 では、 [OTSessionDelegate sessionDidDisconnect:] メッセージが送信されます。次の関数を呼び出してください。 [_subscriber.view removeFromSuperView:] OTSubscriber オブジェクトのメソッドを使用して、サブスクライバーを削除します。
について [OTSubscriber stream:didChangeVideoDimensions:] このメソッドは、SDK バージョン 2.2 で削除されました。新しい OTSubscriberKit クラスを基に、独自のサブスクライバークラスを実装し、ビデオストリームのディメンションを直接監視することができます。(参照: バージョン 2.2 の新 API (以下。)
参照 パブリッシャーおよびサブスクライバーオブジェクトにおけるUIの変更点 OTSubscriber のユーザーインターフェースの変更に関する情報については、以下をご覧ください。
ストリームの公開 — OTPublisher クラスは、新しい OTPublisherKit クラスを継承しています。また、OTPublisherDelegate プロトコルは、新しい OTPublisherKitDelegate プロトコルに準拠しています。(参照: バージョン 2.2 の新 API (以下を参照)。また、OTPublisherDelegate プロトコルにおいて、以下のメッセージ名が変更されました:
| バージョン 2.1.7 | バージョン2.2 |
|---|---|
[OTPublisherDelegate publisherDidStartStreaming:] |
[OTPublisherDelegate publisher: streamCreated:] |
[OTPublisherDelegate publisherDidStopStreaming:] |
[OTPublisherDelegate publisher: streamDestroyed:] |
について OTPublisher.view property は UIView オブジェクトです。(バージョン 2.1.7 では OTVideoView オブジェクトに設定されていましたが、そのクラスは SDK から削除されました。詳しくは パブリッシャーおよびサブスクライバーオブジェクトにおけるUIの変更点.)
SDK バージョン 2.2 では、 [OTSessionDelegate sessionDidDisconnect:] メッセージが送信されます。次の関数を呼び出してください。 [_publisher.view removeFromSuperView:] OTPublisher オブジェクトのメソッドを使用して、パブリッシャーを削除します。
参照 パブリッシャーおよびサブスクライバーオブジェクトにおけるUIの変更点 OTPublisherのユーザーインターフェースの変更に関する情報については、以下をご覧ください。
エラー処理 — 以下のメソッドにエラーパラメータが追加されました:
[OTSession connectWithToken:error:]
[OTSession publish:error:]
[OTSession signalWithType:string:connection:error:]
[OTSession subscribe:error:]
[OTSession unpublish:error:]
[OTSession unsubscribe:error:]
メソッドの呼び出し中に同期エラーが発生した場合は、エラーオブジェクトにOTErrorオブジェクトが設定され、そうでない場合はNULLが設定されます。
たとえば、次のコードは、呼び出し時に同期エラーが発生していないかを確認します。 [OTSession subscribe:error]:
OTError* myError = nil;
[_session subscribe:_subscriber error:&myError]
if (myError) {
NSLog(@"subscribe failed with error: (%@)", myError);
}
バージョン 2.2 では、以下のエラー定数は使用されなくなりました(また、これらは OTError 列挙型には含まれていません):
OTSDKUpdateRequired
OTP2PSessionUnsupported
OTUnknownServerError
OTP2PSessionRequired
OTSessionCompatibilityMismatch
OTSelfSubscriberFailure
バージョン 2.1.7 に含まれる以下の OTSessionErrorCode 定数は、バージョン 2.2 で置き換えられます:
| バージョン 2.1.7 | バージョン2.2 |
|---|---|
OTInvalidSessionId |
OTInvalidSession |
OTSessionSignalConnection |
OTSessionInvalidSignalType; OTSessionSignalDataTooLong |
バージョン 2.1.7 に含まれる以下の OTPublisherErrorCode 定数は、バージョン 2.2 で置き換えられます:
| バージョン 2.1.7 | バージョン2.2 |
|---|---|
OTNoMediaPublished |
OTPublisherInternalError |
OTUserDeniedCameraAccess |
OTPublisherInternalError |
バージョン 2.1.7 に含まれる以下の OTSubscriberErrorCode 定数は、バージョン 2.2 で置き換えられます:
| バージョン 2.1.7 | バージョン2.2 |
|---|---|
OTFailedToConnect |
OTSubscriberInternalError |
OTNoStreamMedia |
OTSubscriberInternalError |
OTInitializationFailure |
OTSubscriberInternalError; OTConnectionTimeOut |
OTInvalidStreamType |
OTSubscriberInternalError |
シグナリングAPI — シグナリング API は、バージョン 2.1.7 からバージョン 2.2 へと変更されました:
| バージョン 2.1.7 | バージョン2.2 |
|---|---|
[OTSession signalWithType: data: completionHandler:] |
[OTSession signalWithType: string: connection: error:] |
[OTSession signalWithType: data: connections: completionHandler:] |
[OTSession signalWithType: string: connection: error:] |
以下の変更点にご注意ください:
- シグナルデータとして送信できるのは文字列のみです。他のタイプのオブジェクトをデータとして設定することはできなくなりました。
- このメソッドは、接続パラメータとして、単一の OTConnection オブジェクト(配列ではない)または nil(セッション内のすべてのクライアントにシグナルを送信する場合)を受け取ります。
- シグナリング用の完了ブロックは削除されました。シグナルの送信に失敗した場合、シグナルメソッドに渡されたエラーオブジェクトは OTError オブジェクトに設定されます。OTSessionErrorCode 列挙型(OTError.h 内)には、以下のものが含まれます。
OTSessionInvalidSignalTypeそしてOTSessionSignalDataTooLongこれらのエラーに関する定数。
バージョン 2.2 では、シグナルの受信処理が OTSessionDelegate プロトコルに実装されています:
| バージョン 2.1.7 | バージョン2.2 |
|---|---|
[OTSession receiveSignalType: withHandler:] |
[OTSessionDelegate session: receivedSignalType: fromConnection: withString:] |
加入者代理人の氏名変更 — OTSubscriberDelegate プロトコルの名称が OTSubscriberKitDelegate に変更されました。
セッションのデリゲート名の変更 — OTSessionDelegate メソッド内のメッセージの一部が名称変更されました:
| バージョン 2.1.7 | バージョン2.2 |
|---|---|
[OTSessionDelegate didReceiveStream:] |
[OTSessionDelegate streamCreated:] |
[OTSessionDelegate didDropStream:] |
[OTSessionDelegate streamDestroyed:] |
[OTSessionDelegate didCreateConnection:] |
[OTSessionDelegate connectionCreated:] |
[OTSessionDelegate didDropConnection:] |
[OTSessionDelegate connectionDestroyed:] |
OTVideoView が削除されました — OTVideoView クラスは含まれなくなりました。詳しくは パブリッシャーおよびサブスクライバーオブジェクトにおけるUIの変更点 の下にある。
OTSession.connectionCount が削除されました — OTSession クラスには、もはや connectionCount プロパティ。これを監視することができます。 [OTSessionDelegate session:connectionCreated:] そして [OTSessionDelegate session:connectionDestroyed:] メッセージを処理し、接続数を独自の変数に記録してください。
OTStream.type が削除されました — OTStreamには、もはや type 財産である。
バージョン 2.2 の新 API
アーカイブ機能のサポート — OpenTok iOS SDK 2.2 は OpenTok をサポートしています アーカイブ機能.その [OTSessionDelegate session:archiveStartedWithId:name:] セッションのアーカイブ録画が開始されると、メッセージが送信されます。この [OTSessionDelegate session:archiveStoppedWithId:] セッションのアーカイブ録画が停止すると、このメッセージが送信されます。このメッセージに基づいて、録画の開始や停止を示すユーザーインターフェース要素を追加または削除するとよいでしょう。
新しいカスタム動画ストリームAPI — 以下の新しいクラスおよびプロトコルが、新しいカスタムビデオストリームAPIをサポートしています:
-
OTPublisherKit—このクラスを使用すると、OpenTokセッションに配信するオーディオ・ビデオストリームに対して、カスタムビデオキャプチャ機能やビデオレンダリング機能を利用できます。なお、iOSのカメラを直接のビデオフィードとして使用するOTPublisherクラスは、OTPublisherKitのサブクラスであることに注意してください。
-
OTSubscriberKit—このクラスを使用すると、オーディオ・ビデオストリームに対してカスタムビデオレンダラーを適用できます。なお、ビデオストリームをそのまま表示するOTSubscriberクラスは、OTSubscriberKitのサブクラスであることに注意してください。
-
OTVideoCapture—このインターフェースを使用すると、OTPublisherKit オブジェクトにビデオデータを提供できます。
-
OTVideoRender—このインターフェースは、OTPublisherKit オブジェクトまたは OTSubscriberKit オブジェクト内のビデオデータをレンダリングするために使用します。
-
カスタムビデオストリームAPIに関連するその他のクラスや列挙型は、OTVideoKit.hファイルに定義されています。
-
新しい OTSession.apiQueue プロパティ — デリゲートのコールバックキューをアプリケーション側で定義できるようになりました。デリゲートへのコールバックを発行するための GCD キューをオーバーライドすることで、XCTest(Xcode 5 の新機能)や、メインスレッド内で動作(およびブロック)する必要があるその他のフレームワークとの統合が可能になります。
-
OTError.h ファイル内の列挙型に新しい値が追加されました。これらのエラーコードの値は、OpenTok.js 2.2 ライブラリおよび OpenTok Android 2.2 SDK における対応するエラーの値と一致しています。
パブリッシャーおよびサブスクライバーオブジェクトにおけるUIの変更点
OTPublisher および OTSubscriber オブジェクトには、以下の機能に関するデフォルトのユーザーインターフェイスコントロールが、もはや含まれていません:
- OTPublisher ビュー内のカメラを切り替えるためのコントロール — 以下の機能を使用する独自のユーザーインターフェイス コントロールを追加できます。
cameraPositionOTPublisher オブジェクトのプロパティで、パブリッシャーが使用するカメラを設定します。 - OTSubscriber ビューと OTPublisher ビューの両方にストリーム名を表示する — 以下の内容に基づいて名前を表示する独自のユーザーインターフェイスコントロールを追加できます。
nameサブスクライバーによって消費される OTStream オブジェクトのプロパティ、または[OTPublisher initWithDelegate:name:]メソッドを使用する。 - OTSubscriber ビューのミュートボタン — ミュート設定を行う独自のユーザーインターフェイスコントロールを追加できます。
subscribeToAudioOTSubscriber オブジェクトのこのプロパティを使用して、サブスクライバーのオーディオをミュートしたり、再生を再開したりします。hasAudioサブスクライバーが、ストリームに音声があるかどうかを判断するために使用する、OTStream オブジェクトのプロパティ。 - OTPublisher ビューのミュートボタン — 以下の設定を行う独自のユーザーインターフェイスコントロールを追加できます。
publishAudioOTPublisher オブジェクトのプロパティで、パブリッシャーのオーディオをミュートしたり、再生を再開したりします。 - チャンネル登録者に対して動画が非表示にされたことを示すインジケーター — これに応答する独自のユーザーインターフェースコントロールを追加できます。
[OTSubscriber subscriberVideoDisabled:reason:]動画が利用できないことを示すメッセージ。
OTPublisher クラスおよび OTSubscriber クラスのデフォルトのビューには、動画のみが含まれます。
これらのユーザーインターフェースコントロールは、ご自身のコードで実装する必要があります。これにより、独自のデザインを採用したり、必要なコントロールのみを追加したりすることが可能になります。この GitHubにあるOpenTok iOS SDKのサンプルアプリ これらを実装する方法を示してください。
このクックブックには、セッションのアーカイブが開始(または停止)されたことを示すユーザーインターフェースコントロールを追加するためのサンプルコードも掲載されています。(アーカイブ機能は、OpenTok iOS SDK バージョン 2.2 で新たに追加された機能です。)
その他の新機能
OpenTok iOS 2.2 SDK では、TCP 経由の TURN にも対応しています。これにより、制限のあるネットワーク環境での接続性が向上します。必要なポートは 80 および 443 のみです。