ライブキャプション — Vonage Video Android SDK

OpenTok Android SDK には、Android クライアントが OpenTok セッション内でキャプションを送信および受信するためのメソッドが含まれています。

ライブキャプションは、セッション単位で以下の設定を通じて有効にする必要があります。 REST API.

ライブキャプションは、以下の場合にのみサポートされます。 ルーティングセッション.

このトピックには以下のセクションが含まれます:

ライブキャプションの公開

OpenTokのパブリッシャーは、以下の関数を呼び出すことで、リアルタイムのライブキャプションの配信を開始または停止することができます。 setPublishCaptions() PublisherKitオブジェクトの

publisher.setPublishCaptions(true);

出版社がオーディオトラックを収録していない場合は PublisherKit.PublisherListener.onError() メソッドがエラーで呼び出された場合 code プロパティを PublisherMissingAudioTrack).

Vonage Android SDK では、パブリッシャーが自身のキャプションに関するイベントを受信することはサポートされていません。話者自身のキャプションを表示するには、(パブリッシャーのストリームに対する)非表示のサブスクライバーを作成し、キャプションイベントをリッスンするようにしてください。(次のセクションを参照してください。)

ライブキャプションを購読する

加入者は、次のコマンドを呼び出すことで、キャプションの受信を開始または停止できる。 subscribeToCaptions() メソッド メソッドを呼び出します:

subscriber.setSubscribeToCaptions(true);

このメソッドは、ストリームのパブリッシャーが現在ライブキャプションを公開しているかどうかに関係なく呼び出すことができます。 このメソッドを呼び出すことができます。サブスクライバは、パブリッシャがキャプションの発行を開始すると、 キャプションデータの受信を開始します。 サブスクライバーはキャプションデータの受信を開始します。

キャプションの受信を停止するには false をメソッドに組み込む:

subscriber.setSubscribeToCaptions(false);

購読者は、ストリームのライブ・キャプションをアクティブに購読しているかどうかを isSubscribedToCaptions() メソッドを使用する:

boolean isSubscribed = subscriber.getSubscribeToCaptions();

加入者はイベントを通じて字幕を受信します。OpenTok SDK では、字幕のテキストは UI 上に表示されません。 SubscriberKit.CaptionsListener インターフェイスを使用して、キャプション・イベントのリスナーを設定します:

SubscriberKit.CaptionsListener captionsListener = new SubscriberKit.CaptionsListener() {
    @Override
    public void onCaptionText(SubscriberKit subscriber, String text, boolean isFinal) {
        // Display the text in the UI.
    }
}

について hasCaptions() メソッドは、ストリームにキャプションがあるかどうかを報告します:

boolean hasCaptions = stream.hasCaptions();

を実施する。 onStreamHasCaptionsChanged() のメソッドを使用する。 Session.StreamPropertiesListener インターフェイスを使用して、ストリームでキャプションが有効になっているときと無効になっているときを監視します:

Session.StreamPropertiesListener captioningListener = new Session.StreamPropertiesListener() {
    @Override
    public void onStreamHasCaptionsChanged(Session session, Stream stream, boolean hasCaptions) {
        // Adjust UI to indicate that captions are or are not available.
    }
}

ライブキャプションの受信

Vonage Video API では、パブリッシャーが自身のキャプションに関するイベントを受信することはサポートされていません。話者自身のキャプションを表示するには、(ローカルパブリッシャーのストリームに対する)非表示のサブスクライバーを作成し、キャプションイベントをリッスンするようにしてください。 このサブスクライバーのビューを UI に表示したり、そのオーディオを購読したりしないでください(エコーを防ぐため)。その後、キャプションのテキストを UI に追加することができます。

Publisherはデフォルトではキャプションを公開しないため、次のコマンドを実行してください。 setPublishCaptions() 渡す true:

    publisher = new Publisher.Builder(this).name(mUsername).build();
	publisher.setPublishCaptions(true);

パブリッシャーのストリームを購読する onStreamCreated() コールバック:

@Override
public void onStreamCreated(PublisherKit publisher, Stream stream) {
	Log.d(LOG_TAG, "onStreamCreated: Publisher Stream Created. Own stream " + stream.getStreamId());
	subscriber = new Subscriber.Builder(MainActivity.this, stream).build();
	subscriber.setSubscribeToAudio(false);
	subscriber.setSubscribeToVideo(true); // This is a workaround for an OpenTok bug.
	subscriber.setSubscribeToCaptions(true);
	subscriber.setCaptionsListener(this);

	selfPublisherStreamId = stream.getStreamId();
}

前述の通り、字幕を表示するには動画の購読が必要です。(この問題は今後のバージョンで修正される予定です。)

この例では、パブリッシャーのストリーム ID を selfPublisherStreamId 変数。ここでは、そのビューがUIに追加されないようにするために使用されています:

@Override
public void onStreamReceived(Session session, Stream stream) {
	Log.d(TAG, "onStreamReceived: New Stream Received " + stream.getStreamId() + " in session: " + session.getSessionId());

	if(stream.getStreamId() == selfPublisherStreamId) {
		return;
	}

	// Show subscriber in the UI
	if (subscriber == null) {
		subscriber = new Subscriber.Builder(MainActivity.this, stream).build();
		subscriber.getRenderer().setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL);
		subscriber.setSubscriberListener(subscriberListener);
		session.subscribe(subscriber);
		subscriberViewContainer.addView(subscriber.getView());
	}
}

購読者は、(公開されたストリーム用の)文字起こしテキストを onCaptionText() リスナー:

@Override
public void onCaptionText(SubscriberKit subscriber, String text, boolean isFinal) {
    // Adjust UI to show captions.
}