Live-Untertitel – Vonage Video iOS SDK

Das OpenTok-iOS-Client-SDK enthält Methoden, mit denen iOS-Clients in einer OpenTok-Sitzung Untertitel senden und empfangen können.

Die Live-Untertitelung muss auf Sitzungsebene über die REST-API.

Live-Untertitelung wird nur unterstützt in weitergeleitete Sitzungen.

Dieses Thema umfasst die folgenden Abschnitte:

Veröffentlichung von Live-Beschriftungen

Ein OpenTok-Publisher kann die Veröffentlichung von Echtzeit-Live-Untertiteln starten oder beenden, indem er die publishCaptions Eigenschaft des OTPublisherKit-Objekts:

publisher.publishCaptions = YES;

Wenn der Verlag keine Tonspur anbietet, wird die [PublisherKit publisher:didFailWithError:] Nachricht gesendet wird, mit der code Eigenschaft des Fehlers, die auf OTPublisherMissingAudioTrack.

Das Vonage iOS SDK unterstützt nicht, dass ein Herausgeber Ereignisse für seine eigenen Untertitel empfängt. Um die eigenen Beschriftungen des Sprechers wiederzugeben, erstellen Sie einen versteckten Abonnenten (für den Stream des Herausgebers), der auf die Beschriftungsereignisse hört. (Siehe den nächsten Abschnitt.)

Abonnieren von Live-Untertiteln

Ein Teilnehmer kann den Empfang von Untertiteln starten oder stoppen, indem er die Option subscribeToCaptions Eigenschaft des OTSubscriberKit-Objekts:

subscriber.subscribeToCaptions = YES;

Sie können diese Methode unabhängig davon aufrufen, ob der Herausgeber des Streams gerade Live-Untertitel veröffentlicht. Der Abonnent beginnt mit dem Empfang von Untertiteldaten, sobald der Herausgeber mit der Untertitel zu veröffentlichen.

Um keine Untertitel mehr zu erhalten, setzen Sie die Eigenschaft auf NO:

subscriber.setSubscribeToCaptions = NO;

Die [OTSubscriberKitCaptionsDelegate subscriber:caption:isFinal:] Nachricht wird gesendet, wenn ein Abonnent eines Streams Untertitel empfängt:

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

Sie können einen Schlüssel-Wert-Beobachter für die hasCaptions Eigenschaft eines OTStream um zu sehen, wann der Stream Untertitel aktiviert und deaktiviert hat:

//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
}

Eigene Live-Titel empfangen

Die Vonage Video API unterstützt es nicht, dass ein Publisher Ereignisse für seine eigenen Untertitel empfängt. Um die eigenen Untertitel des Sprechers darzustellen, erstellen Sie einen versteckten Subscriber (für den Stream des lokalen Publishers), der auf Untertitelereignisse wartet. Zeigen Sie die Ansicht dieses Abonnenten nicht in der Benutzeroberfläche an und abonnieren Sie dessen Audio nicht (um ein Echo zu vermeiden). Anschließend können Sie den Untertiteltext in die Benutzeroberfläche einfügen.

Der Publisher veröffentlicht standardmäßig keine Bildunterschriften. Legen Sie daher die publishCaptions Eigentum des Verlags an TRUE:

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

Den Stream abonnieren unter [OTPublisherKitDelegate publisher:streamCreated:] Methode:

- (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;
}

Wie oben bereits erwähnt, müssen Sie das Video abonnieren, um Untertitel zu erhalten. (Dies wird in einer zukünftigen Version behoben.)

In diesem Beispiel wird die Stream-ID des Publishers in einer _selfPublisherStreamId Variable, die hier verwendet wird, um zu verhindern, dass ihre Ansicht zur Benutzeroberfläche hinzugefügt wird:

- (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];
}

Der Abonnent erhält den transkribierten Text (für Ihren veröffentlichten Stream) in dem folgenden Delegaten:


- (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
    }
}