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

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

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

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

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

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

OpenTokのパブリッシャーは、以下の設定を行うことで、リアルタイムのライブキャプションの配信を開始または停止することができます。 publishCaptions プロパティを使用します:

publisher.publishCaptions = YES;

出版社がオーディオトラックを収録していない場合は [PublisherKit publisher:didFailWithError:] メッセージが送信される。 code プロパティを OTPublisherMissingAudioTrack.

Vonage iOS SDKは、パブリッシャーが自身のキャプションのイベントを受信することをサポートしていません。スピーカー自身のキャプションをレンダリングするには、(パブリッシャーのストリームに) キャプションイベントをリッスンする隠しサブスクライバーを作成します。(次のセクションを参照してください)。

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

購読者は、次のように設定することで、キャプションの受信を開始または停止することができます。 subscribeToCaptions プロパティ プロパティを使用します:

subscriber.subscribeToCaptions = YES;

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

キャプションの受信を停止するには、プロパティを NO:

subscriber.setSubscribeToCaptions = NO;

について [OTSubscriberKitCaptionsDelegate subscriber:caption:isFinal:] メッセージは メッセージが送信される:

// OTSubscriber delegate callbacks:
-(void) subscriber:(OTSubscriberKit *)subscriber caption:(NSString *)text isFinal:(BOOL)final {
    // Display caption text in UI.
}

のキー・バリュー・オブザーバーを設定することができます。 hasCaptions OTStreamの プロパティを使用すると、ストリームでキャプションが有効になっているときと無効になっているときを確認できます:

//add observer on a stream of interest
[_subscriber.stream addObserver:self forKeyPath:@"hasCaptions" options:NSKeyValueObservingOptionNew context:NULL];
    
- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {
    NSLog(@"KVO change for %@ = %@",keyPath, change); 
    //manipulate GUI element
}

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

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

Publisherではデフォルトでキャプションは公開されないため、 publishCaptions 出版社の所有物である TRUE:

    _publisher =
    [[OTPublisher alloc] initWithDelegate:self
                                 settings:settings];
    _publisher.publishCaptions = TRUE;
    OTError *error = nil;
    [_session publish:_publisher error:&error];

ストリームを [OTPublisherKitDelegate publisher:streamCreated:] メソッドを使用する:

- (void)publisher:(OTPublisherKit *)publisher
    streamCreated:(OTStream *)stream
{
    // Self subscribe to our own publisher stream
    _subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
    _subscriber.subscribeToAudio = false;
    _subscriber.subscribeToVideo = true;  // This is a workaround for an OpenTok bug.
    _subscriber.subscribeToCaptions = true;
    _subscriber.captionsDelegate = self;
    OTError *error = nil;
    [_session subscribe:_subscriber error:&error];
    if (error)
    {
        [self showAlert:[error localizedDescription]];
    }
    _selfPublisherStreamId = stream.streamId;
}

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

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

- (void)subscriberDidConnectToStream:(OTSubscriberKit*)subscriber
{
    if ([subscriber.stream.streamId isEqualToString:_selfPublisherStreamId]) {
        return; // Don't show the self subscriber view.
    }
    
    [_subscriber.view setFrame:CGRectMake(0, widgetHeight, widgetWidth,
                                          widgetHeight)];
    [self.view addSubview:_subscriber.view];
}

サブスクライバーは、以下のデリゲート内で(公開されたストリーム用の)文字起こしテキストを取得できます:


- (void)subscriber:(nonnull OTSubscriberKit*)subscriber
           caption:(NSString*_Nonnull)text
           isFinal:(BOOL)isFinal {
    // Adjust UI to show captions.
    if ([subscriber.stream.streamId isEqualToString:_selfPublisherStreamId])
    {
        // text is your own audio as transcribed text or captions
        NSLog(@"My own caption %@", text);
    } else {
        // other subscribers captions
    }
}