Twilio移行ガイド(Android)
このガイドでは、既存の Twilio Video を Vonage Video SDK に移行する方法を説明します。Vonageは、開始するために2つの方法を提供しています:Vonageの Video API.
概要
Twilio と Vonage Video API のコンセプトは非常によく似ています。このスターターガイドは、ビデオアプリケーションの移行を支援することを目的としています。
主な違いは、Twilioではルームを作成する必要があることです。 SID Vonageでは セッションID.そして、クライアント側でTwilioのルームやVonageのセッションに接続するための認証トークンを作成します。
以下の図に主な違いを詳しく示す:
ビデオSDKの認証情報を取得する
を作成する。 開発者アカウント をクリックして、開発者ポータルにアクセスしてください。ビデオを始めるには、アプリケーションを作成する必要があります。アプリケーションを作成するには アプリケーションを作成する ガイド アプリケーションID そして 秘密鍵.
SDKのインストール
Gradleファイル(build.gradle)のTwilio video SDKリファレンスをVonage video SDKに置き換えてください。
このように implementation 'com.twilio:video-android:7.5.1' への implementation ‘com.opentok.android:opentok-android-sdk:2.27.0’.
必要な権限を有効にする
まだの場合は、以下のパーミッションを有効にしてください。 AndroidManifest.xml ファイル:
...
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
</manifest>
認証
Vonage Video SDK は、ユーザを認証するためにトークンを使用します。トークンを生成する際に、ユーザの役割(サブスクライバ、パブリッシャ、モデレータ)を設定できます。オプションで トークンにメタデータの文字列を割り当てる。 (接続されたクライアントを識別するため)。 トークン作成の概要 トークンを生成する際に使用できるオプションについては、こちらを参照してください。トークンはサーバーサイドで生成され、クライアントサイドに送信されます。トークンはサーバーサイドで生成され、クライアントサイドに送信されます。 サーバーサイドSDKガイド をご覧ください。
ビデオセッションの作成
A セッション のようなものだ。 部屋同じ セッションID は互いにコミュニケーションをとることができるだろう。 同じように トークン, セッション はサーバー側で作成される。
をご参照ください。 セッションの作成 ガイド をご覧ください。
セッションの作成とトークンの生成には サーバーSDK.
ビデオセッションに接続する
クライアント・エンドポイントをVonage Videoセッションに接続するには、アプリケーションID、セッションID、トークンが必要です。
これらの認証情報は ダッシュボード しかし、本番環境では、サーバーSDKを使用してセッションIDとトークンを提供します。 ベーシック・ビデオチャット プロジェクト)。
Twilio Vonage用語マッピング
| Twilio | Vonage |
|---|---|
| Room | Session |
| Participants | Subscriber(s) + Publisher(s) |
| Tracks | Stream |
| RemoteTracks | Subscribers(s).stream |
| LocalTracks | Publisher(s).stream |
ビデオセッションへの接続
ビデオ・ストリームの接続と管理は、イベント・ハンドラを使って行われる。
実装する必要がある主なイベント・リスナーは3つある:
- セッション・リスナー (
private Session mSession;) - PublisherKit.PublisherListener (
private Publisher mPublisher;) - SubscriberKit.SubscriberListener (
private Subscriber mSubscriber;)
セッションリスナー
について Session.SessionListener メソッドは、参加者(サブスクライバーとパブリッシャー)の追加と削除を含む イベントを処理するために使われる。
これはTwilioの Room.Listener イベントハンドラ。
以下は、露出した選手の構成である。 SessionListener インターフェイスを使用している:
private Session.SessionListener sessionListener = new Session.SessionListener() {
@Override
public void onConnected(Session session) {
Log.d(TAG, "onConnected: Connected to session: " + session.getSessionId());
mPublisher = new Publisher.Builder(MainActivity.this).build();
mPublisher.setPublisherListener(publisherListener);
mSession.publish(mPublisher);
}
@Override
public void onDisconnected(Session session) {
Log.d(TAG, "onDisconnected: Disconnected from session: " + session.getSessionId());
}
@Override
public void onStreamReceived(Session session, Stream stream) {
Log.d(TAG, "onStreamReceived: New Stream Received " + stream.getStreamId() + " in session: " + session.getSessionId());
mSubscriber = new Subscriber.Builder(MainActivity.this, stream).build();
mSubscriber.setSubscriberListener(subscriberListener);
mSession.subscribe(mSubscriber);
}
@Override
public void onStreamDropped(Session session, Stream stream) {
Log.d(TAG, "onStreamDropped: Stream Dropped: " + stream.getStreamId() + " in session: " + session.getSessionId());
}
@Override
public void onError(Session session, OpentokError opentokError) {
Log.e("Session error: " + opentokError.getMessage());
}
};
パブリッシャーリスナー
について PublisherKit.PublisherListener は、作成ストリームと終了ストリームに基づいて実行されるロジックを実装するために使用される。
以下は、露出した選手の構成である。 PublisherListener インターフェイスを使用している:
private PublisherKit.PublisherListener publisherListener = new PublisherKit.PublisherListener() {
@Override
public void onStreamCreated(PublisherKit publisherKit, Stream stream) {
Log.d(TAG, "onStreamCreated: Publisher Stream Created. Own stream " + stream.getStreamId());
}
@Override
public void onStreamDestroyed(PublisherKit publisherKit, Stream stream) {
Log.d(TAG, "onStreamDestroyed: Publisher Stream Destroyed. Own stream " + stream.getStreamId());
}
@Override
public void onError(PublisherKit publisherKit, OpentokError opentokError) {
Log.e("PublisherKit onError: " + opentokError.getMessage());
}
};
購読者リスナー
について SubscriberKit.SubscriberListener は、サブスクライバがストリームに参加するときに実行するロジックを実装するために使用します。
以下は、露出した選手の構成である。 SubscriberListener インターフェイスを使用している:
SubscriberKit.SubscriberListener subscriberListener = new SubscriberKit.SubscriberListener() {
@Override
public void onConnected(SubscriberKit subscriberKit) {
Log.d(TAG, "onConnected: Subscriber connected. Stream: " + subscriberKit.getStream().getStreamId());
}
@Override
public void onDisconnected(SubscriberKit subscriberKit) {
Log.d(TAG, "onDisconnected: Subscriber disconnected. Stream: " + subscriberKit.getStream().getStreamId());
}
@Override
public void onError(SubscriberKit subscriberKit, OpentokError opentokError) {
Log.e("SubscriberKit onError: " + opentokError.getMessage());
}
};
セッションへの接続
が必要です。 APP_ID , セッションID でビデオストリームに接続する。
A 東建 参加したいストリームに対応するものも必要です。
トワイリオ
private Room room;
ConnectOptions.Builder connectOptionsBuilder =
new ConnectOptions.Builder(accessToken).roomName(roomName);
room = Video.connect(this, connectOptionsBuilder.build(), roomListener());
ボネージ
Session.Builder builder = new Session.Builder(this, APP_ID, SESSION_ID);
mSession = builder.build();
mSession.setSessionListener(sessionListener);
mSession.connect(TOKEN);
ビデオ出版
Vonage Video SDKは、ネットワーク条件とデバイスの能力に基づいて、ビデオ画質を自動的に調整します。
とはいえ、次のような特定のプロパティを設定することができます。 決議, フレームレートそして オーディオフォールバック.一つのパブリッシャーオブジェクトはオーディオとビデオの両方を扱うことが出来ます。パブリッシャーオブジェクトで利用可能なメソッドを使って、 オーディオとビデオを選択的にコントロールすることができます。
出版社を追加
トワイリオ
localVideoTrack = LocalVideoTrack.create(this, true, cameraCapturerCompat, LOCAL_VIDEO_TRACK_NAME);
ヴォネージ
Session.SessionListener() {
@Override
public void onConnected(Session session) {
Log.d(TAG, "onConnected: Connected to session: " + session.getSessionId());
mPublisher = new Publisher.Builder(MainActivity.this).build();
mPublisher.setPublisherListener(publisherListener);
mSession.publish(mPublisher);
}
}
オーディオトラックのみ
トワイリオ
localVideoTrack =
LocalVideoTrack.create(this, false, cameraCapturerCompat, LOCAL_VIDEO_TRACK_NAME);
ヴォネージ
mPublisher = new Publisher.Builder(this).name(mUsername)
.videoTrack(false)
.build();
ビデオトラックのみ
トワイリオ
localAudioTrack = LocalAudioTrack.create(this, false, LOCAL_AUDIO_TRACK_NAME);
ヴォネージ
mPublisher = new Publisher.Builder(this).name(mUsername)
.audioTrack(false)
.build();
セッションからのアンパブリッシュ
トワイリオ
localParticipant.unpublishTrack(localVideoTrack);
ヴォネージ
mSession.unpublish(mPublisher);
ミュート・パブリッシャー・オーディオ
トワイリオ
localAudioTrack.enable(false);
ヴォネージ
mPublisher.setPublishAudio(false);
アンミュート・パブリッシャー・オーディオ
トワイリオ
localAudioTrack.enable(true);
ヴォネージ
mPublisher.setPublishAudio(true);
ミュート・パブリッシャービデオ
トワイリオ
localVideoTrack.enable(false);
ヴォネージ
mPublisher.setPublishVideo(false);
アンミュート・パブリッシャー・ビデオ
トワイリオ
localVideoTrack.enable(true);
ヴォネージ
mPublisher.setPublishVideo(true);
ストリームを購読する
リモート参加者(サブスクライバー)がセッションに接続すると、次のようになる。 Session.SessionListener.onStreamReceived() コールバックは、対応するストリーム・オブジェクトで呼び出されます。
トワイリオ
@Override
public void onConnected(Room room) {
localParticipant = room.getLocalParticipant();
setTitle(room.getName());
for (RemoteParticipant remoteParticipant : room.getRemoteParticipants()) {
addRemoteParticipant(remoteParticipant);
break;
}
}
ヴォネージ
@Override
public void onStreamReceived(Session session, Stream stream) {
Log.d(TAG, "onStreamReceived: New Stream Received " + stream.getStreamId() + " in session: " + session.getSessionId());
mSubscriber = new Subscriber.Builder(MainActivity.this, stream).build();
mSubscriber.setSubscriberListener(subscriberListener);
mSession.subscribe(mSubscriber);
}
セッションからの切断
トワイリオ
room.disconnect()
ヴォネージ
mSession.disconnect()
onPause() および onResume() メソッド
ヴォネージ
@Override
protected void onPause() {
super.onPause();
if (mSession != null) {
mSession.onPause();
}
}
@Override
protected void onResume() {
super.onResume();
if (mSession != null) {
mSession.onResume();
}
}
理想的には onPause() そして onResume() に実装されるべきである。 MainActivity クラス。
画面共有
アプリの例 画面共有.
テキストチャットアプリ
アプリの例 テキスト送信.
詳細情報
- サンプル グラドル ファイル。
- サンプル・アプリケーション Androidサンプルアプリ.
- ベストプラクティス ビデオアプリケーションを構築する。
- Vonage Video API Android SDK
- サーバーサイドSDK