Das Cast SDK enthält integrierte APIs für Liveinhalte. Dazu gehört eine flexible, sofort einsatzfähige Benutzeroberfläche in Kombination mit APIs, mit denen Entwickler mit nur wenigen Codezeilen umfangreiche Live-Erlebnisse schaffen können. Die Live API unterstützt die Anzeige von Start- und Endzeiten, Programmmetadaten, DVR-Steuerelementen und suchbaren Fenstern.
In diesem Leitfaden wird gezeigt, wie ein Stream für die Live APIs konfiguriert wird. Dazu gehören Code- und Metadatenbeispiele zum Konfigurieren von Live-Kernszenarien sowie Screenshots, die zeigen, wie die einzelnen Szenarien aussehen.
Voraussetzungen
Sie müssen mit den Grundlagen der Implementierung eines Web Receivers vertraut sein, bevor Sie diesen Leitfaden lesen. Zum Ausführen der Codebeispiele benötigen Sie außerdem Zugriff auf einen Livestream, der einem der unterstützten Medientypen für Cast entspricht. Im Allgemeinen unterstützt die Funktion „Live“ typische Livestreamkonfigurationen für die unterstützten Medien.
Die folgenden Begriffe werden im gesamten Leitfaden verwendet:
- Seekable Window: Der Bereich eines Livestreams, in dem Nutzer suchen können.
- Live Edge: Der neueste Teil eines Livestreams, der für den Player verfügbar ist.
- Wiedergabekopf: Ein UI-Zeitstempel für die aktuelle Wiedergabeposition.
Livestreaming
Es gibt zwei Möglichkeiten, das Web Receiver SDK so zu konfigurieren, dass die Live API für Inhalte verwendet wird:
- mit dem
LOAD
-Abfangdienst für Nachrichten in Ihrer Web Receiver-Anwendung. (empfohlen) - mit einer Sender- oder Empfängeranfrage.
Der Listener stellt ein LoadRequestData
-Objekt bereit, das alle wichtigen Metadaten zu einer Ladeanfrage enthält. Wenn Sie angeben möchten, dass eine Ladeanfrage für einen Livestream gilt, legen Sie einfach streamType
für das mediaInformation
-Objekt auf StreamType.LIVE
fest.
MediaInformation.duration
sollte -1
lauten, da die Spielerinstanzen dafür verantwortlich sind, sie zu berechnen, wenn der Inhalt LIVE
ist.
/*
* This interceptor is called before your content is loaded by a Cast device
*/
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
request => { /* cast.framework.messages.LoadRequestData */
request.media.streamType = cast.framework.messages.StreamType.LIVE;
return request;
});
Programmübersicht hinzufügen
Bei Livestreams, insbesondere bei Livestreams mit langer Ausführungszeit, wie bei einem TV-Kanal, können basierend auf der aktuellen Wiedergabeposition in einem Livestream Metadaten der Anleitung/Programmierung angezeigt werden. Content-Anbietern wird dringend empfohlen, Programmiermetadaten in ihre Web Receiver-Anwendungen aufzunehmen, um die Nutzerfreundlichkeit zu verbessern.
Sie können die anfänglichen Anleitungsdaten für einen Stream im Listener für LOAD-Nachrichten so konfigurieren, wie wir im vorherigen Beispiel angegeben haben, dass der Stream ein Livestream ist. Einzelne Abschnitte oder Programme im Livestream werden als MediaMetadata
-Objekte dargestellt, die dann in einer Warteschlange gespeichert werden.
Es gibt eine andere MediaMetadata
-Klasse für verschiedene Arten von Programmen, z.B. TvShowMediaMetadata
, MovieMediaMetadata
, MusicTrackMediaMetadata
usw.
Im folgenden Code-Snippet verwenden wir das Objekt MediaMetadata
, um die Startzeit jeder Sendung mit einem UNIX-Zeitstempel mit dem Attribut sectionStartAbsoluteTime
anzugeben. Die Dauer eines Programms wird in Sekunden angegeben.
// The metadata for a single TV show
const currentShow = new cast.framework.messages.TvShowMediaMetadata();
currentShow.episode = 15;
currentShow.seriesTitle = 'The Odyssey';
currentShow.title = 'Scylla and Charybdis';
currentShow.sectionStartAbsoluteTime = toUnixTimestamp('9:00 PM');
currentShow.sectionDuration = HOUR_IN_SECONDS;
const previousShow = new ...;
const nextShow = new ...;
const containerMetadata = new cast.framework.messages.ContainerMetadata();
containerMetadata.title = 'My TV Channel';
containerMetadata.sections = [previousShow, currentShow, nextShow];
playerManager.getQueueManager().setContainerMetadata(containerMetadata);
Bereich für Livesuche
Das Cast SDK enthält UI-Elemente und -Steuerelemente, mit denen Nutzer ihren Abspielkopf mithilfe des erweiterten Controllers oder der Touchbedienung auf Geräten mit Touchscreen im Stream verschieben können.
LiveSeekableRange
steht für den Zeitraum in einem Stream, in dem ein Nutzer suchen kann. Im Webempfänger können Sie Informationen über den Suchbereich über PlayerManager.getLiveSeekableRange()
abrufen, das ein LiveSeekableRange
-Objekt zurückgibt. Die wichtigsten Eigenschaften des Objekts, die Sie kennen sollten:
- start – Die Startzeit des Bereichs in Sekunden, bezogen auf den Beginn des Streams, in Sekunden.
- end – Die maximale Zeit (in Sekunden), die der Spieler basierend auf den verfügbaren Segmenten relativ zum Beginn des Streams suchen kann.
- isMovingWindow: ein boolescher Wert, der angibt, ob der suchbare Bereich aus dem Manifest verschoben wird (d.h. ältere Segmente werden aus dem Manifest entfernt), muss für alle Livestreams true lauten.
- isLiveDone – ein boolescher Wert, der angibt, ob der Livestream beendet ist, also keine neuen Segmente generiert werden.
Die Größe des Suchbereichs, dargestellt als Zeit zwischen start
und end
, wird durch die Anzahl der im Stream verfügbaren Segmente bestimmt und wird zusammen mit dem Stream verschoben. Wenn der Beginn des Streams z. B. {start:0, end: 600, isMovingWindow: false, isLiveDone: false}
beträgt, kann er zehn Sekunden nach dem Start des Streams {start: 10, end: 610,
isMovingWindow: true, isLiveDone: false}
werden. Beachten Sie, dass die Start- und Endzeiten im Suchbereich auf der Grundlage der Zeit aktualisiert werden, die zum Generieren eines neuen Segments erforderlich ist. Wenn die typische Länge eines Segments für Ihren Stream also 10 Sekunden beträgt, werden die Start- und Endzeiten etwa alle 10 Sekunden aktualisiert.
Suche deaktivieren
Wenn Sie die Suche in einem Stream deaktivieren möchten, müssen Sie die Suchfunktion aus den unterstützten Medienbefehlen auf dem Web Receiver entfernen:
// disable seeking in the LOAD messageInterceptor
playerManager.removeSupportedMediaCommands(cast.framework.messages.Command.SEEK, true);
Der unterstützte Medienbefehl für SEEK
-Signale für Absenderanwendungen und Touchscreens wird entfernt, um die Suche zu deaktivieren. Sprachbefehle wie „Ok Google, such 30 Sekunden zurückspulen“ werden jedoch nicht deaktiviert. Weitere Informationen zum Deaktivieren von Medienbefehlen für Sprachbefehle finden Sie im Leitfaden zu unterstützten Medienbefehlen mit Sprachsteuerung.
Live-Framework-Ereignisse
Die beiden Ereignisse LIVE_ENDED
und LIVE_IS_MOVING_WINDOW_CHANGED
sind in der Live API enthalten. Beide Ereignisse werden an ein LiveStatusEvent
-Objekt übergeben, das den aktuellen Livesuchbereich enthält.
Veranstaltung | Beschreibung |
---|---|
LIVE_ENDED |
Wird ausgelöst, wenn ein Livestream endet An diesem Punkt wird der Wert für end in LiveSeekableRange nicht mehr aktualisiert. Nutzer können jedoch weiterhin Inhalte im Live-Suchbereich sehen. |
LIVE_IS_MOVING_WINDOW_CHANGED |
Wird ausgelöst, wenn sich der durchsuchbare Bereich eines Livestreams von einem festen Fenster in ein bewegliches Fenster oder umgekehrt ändert. Bei einem Livestream passiert das, wenn der Spieler erkennt, dass das Manifest ältere Segmente entfernt. |
Szenarien für Livestreams
Es gibt acht mögliche Szenarien für das Livestreaming. Jede davon wird durch die Festlegung von drei Haupteinstellungen konfiguriert:
- Der Stream hat eine Startzeit
- Der Stream hat eine Endzeit
- Nutzer dürfen im Fenster des Livestreams suchen
Weitere Informationen zur Konfiguration dieser Werte finden Sie unter Daten zum Programmleitfaden hinzufügen.
Im Folgenden finden Sie Beschreibungen und Screenshots der Szenarien, die von der Live API unterstützt werden. Die Variablen T1 und T2 werden zur Darstellung des Zeitstempels auf der linken bzw. rechten Seite der Benutzeroberfläche verwendet.
Beginn | Ende | Suchbar | T1 | T2 | |
---|---|---|---|---|---|
Situation 1 | Nein | Nein | Nein | Wiedergabekopf | Nicht angezeigt |
Szenario 7 | Ja | Ja | Nein | Startzeit anzeigen | Ende anzeigen |
Szenario 8 | Ja | Ja | Ja | Startzeit anzeigen | Ende anzeigen |
Szenario 1
Beginn | Ende | Suchbar | T1 | T2 |
---|---|---|---|---|
Nein | Nein | Nein | Wiedergabekopf | Nicht angezeigt |
Szenario 1 hat keine Start- oder Endzeit und Nutzer können im Stream nicht suchen. Wenn ein Nutzer einen Stream anhält, wird die Wiedergabe am Live-Edge fortgesetzt und nicht an der Stelle, an der der Stream pausiert wurde.
Szenario 7
Beginn | Ende | Suchbar | T1 | T2 |
---|---|---|---|---|
Ja | Ja | Nein | Wiedergabekopf | Programmdauer |
Szenario 7 hat eine Start- und Endzeit, ist aber nicht suchbar. Die beiden Zeitstempel in der UI, T1 und T2, stellen jeweils die aktuelle Abspielkopfzeit und die Gesamtprogrammdauer dar. Wenn ein Nutzer die Wiedergabe pausiert/fortsetzt, wird der Stream am Live-Edge des Streams fortgesetzt. Im obigen Beispiel steht der rote Abschnitt der Suchleiste für den Teil des Streams, den der Nutzer seit Beginn der Wiedergabe verwendet hat.
Szenario 8
Beginn | Ende | Suchbar | T1 | T2 |
---|---|---|---|---|
Ja | Ja | Ja | Wiedergabekopf | Programmdauer |
Szenario 7 hat eine Start- und Endzeit und ist suchbar. Die beiden Zeitstempel in der UI, T1 und T2, stellen die aktuelle Abspielkopfzeit bzw. die Gesamtdauer des Programms dar. Wenn ein Nutzer die Wiedergabe pausiert oder fortsetzt, wird der Stream zu dem Zeitpunkt fortgesetzt, an dem er innerhalb des suchbaren Fensters pausiert wurde. Der rot hervorgehobene Bereich auf der Suchleiste zeigt an, wohin der Nutzer zurückspringen kann, und der weiße Bereich gibt an, wohin er vorwärts springen kann.
Szenario konfigurieren
Die Konfiguration eines Streams als spezifisches Live-Szenario erfolgt in drei Schritten:
- Streamtyp festlegen: Markiere den Stream als Livestream.
- Add Guide Guide Data - Legen Sie Startzeit und Dauer im
MediaMetadata
-Objekt fest. - Suchfunktion konfigurieren: Die Suche aktivieren oder deaktivieren.
Wiedergabeverhalten
Wenn die Wiedergabe pausiert ist, werden die Metadaten der Wiedergabe der Benutzeroberfläche weiterhin aktualisiert – dies beinhaltet die Kopf- und Live-Edge-Zeiten der Wiedergabe. Bei der Wiederaufnahme des Streams gibt es einige Verhaltensmuster, die je nach Streamkonfiguration variieren können.
Durchsuchbare Streams
Nach der Wiederaufnahme eines durchsuchbaren Streams gilt Folgendes:
- Der Live-Edge wird auf den Live-Standort aktualisiert und der Suchbereich wird entsprechend angepasst.
- Wenn der Abspielkopf über die aktuelle Sendung springt, wird die Scrubbing-Leiste mit den Metadaten der neuen Sendung aktualisiert, einschließlich der Start- und Endzeit, sofern verfügbar.
- Wenn ein suchbares Fenster die Länge 'X' hat, erstreckt sich der Suchbereich auf höchstens 'X' oder den Anfang der Sendung, je nachdem, welcher Wert kleiner ist.
- Wenn der Nutzer lange genug pausiert wurde, damit sich die aktuelle Zeit nicht mehr im suchbaren Fenster befindet, wird der Stream an dem frühesten Zeitpunkt (ganz links) des Suchfensters fortgesetzt.
Suchen Sie nach LiveSeekableRange.end
, um nach dem Fortsetzen die Wiedergabe am Live-Edge fortzusetzen.
let playerManager = cast.framework.CastReceiverContext.getInstance().getPlayerManager();
// Intercept the message to PLAY
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.PLAY, (requestData) => {
...
if (playerManager.getLiveSeekableRange()) {
// Resume playback at the live edge
playerManager.seek(playerManager.getLiveSeekableRange().end);
} else {
return requestData;
}
...
});
Nicht suchbare Streams
Bei der Wiederaufnahme eines nicht suchbaren Streams gilt Folgendes:
- In diesem Fall wird die Wiedergabe am Live-Edge fortgesetzt.
- Wenn der Liverand über die aktuelle Sendung hinausgeht, sollte die Scrubbing-Leiste mit den Metadaten der neuen Sendung aktualisiert werden (einschließlich der Startzeit und der Endzeit).
API-Oberflächenänderungen und Anpassung der Live-UI
Das Cast SDK bietet eine integrierte Unterstützung für das Erstellen benutzerdefinierter Benutzeroberflächen anstelle der vorkonfigurierten UI. Sie sollten jedoch die Checkliste für das Design der UX für das Streamen befolgen, wenn Sie die Benutzeroberfläche anpassen.
Web-Empfänger
Im Webempfänger enthält PlayerData
die folgenden Felder, damit Entwickler ihre benutzerdefinierten Schnittstellen für Livestreams erweitern können:
- isLive – ein Flag, das angibt, ob der aktuelle Stream ein Livestream und kein VOD-Stream ist.
- liveSeekableRange – Der suchbare Bereich, der auf dem Bildschirm angezeigt wird, um das DVR-Fenster abzugrenzen.
- mediaStartAbsoluteTime – Wenn der Abschnitt in absoluter Zeit (UNIX-Epoche) gestartet wurde.
- sectionStartTimeInMedia: Die Startzeit des Abschnitts in Sekunden, bezogen auf die Medienstartzeit.
- sectionDuration: Die Abschnittsdauer in Sekunden.
Außerdem solltest du beim Anpassen der UI die zwei Live-Ereignisse berücksichtigen.
Android SDK
Als Teil der Live-Funktion wurde die Verwendung des Android-Seekbar-Widgets in UIMediaController
eingestellt. Verwende stattdessen die CastSeekBar
.