MediaTrack
steht für einen Medien-Track, bei dem es sich um einen Audio-Stream, einen Video-Stream oder Text handeln kann.
(z. B. Untertitel). Deine App kann Inhalte gruppieren, gestalten und
Medientracks.
Track konfigurieren
Sie können einen Track konfigurieren und ihm eine eindeutige ID zuweisen. Der folgende Code einen englischen, einen französischen und einen französischen Audiotrack erstellt. jede mit ihrer eigenen ID:
<ph type="x-smartling-placeholder">val englishSubtitle = MediaTrack.Builder(1 /* ID */, MediaTrack.TYPE_TEXT) .setName("English Subtitle") .setSubtype(MediaTrack.SUBTYPE_SUBTITLES) .setContentId("https://some-url/caption_en.vtt") /* language is required for subtitle type but optional otherwise */ .setLanguage("en-US") .build() val frenchSubtitle = MediaTrack.Builder(2, MediaTrack.TYPE_TEXT) .setName("French Subtitle") .setSubtype(MediaTrack.SUBTYPE_SUBTITLES) .setContentId("https://some-url/caption_fr.vtt") .setLanguage("fr") .build() val frenchAudio = MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO) .setName("French Audio") .setContentId("trk0001") .setLanguage("fr") .build()
MediaTrack englishSubtitle = new MediaTrack.Builder(1 /* ID */, MediaTrack.TYPE_TEXT) .setName("English Subtitle") .setSubtype(MediaTrack.SUBTYPE_SUBTITLES) .setContentId("https://some-url/caption_en.vtt") /* language is required for subtitle type but optional otherwise */ .setLanguage("en-US") .build(); MediaTrack frenchSubtitle = new MediaTrack.Builder(2, MediaTrack.TYPE_TEXT) .setName("French Subtitle") .setSubtype(MediaTrack.SUBTYPE_SUBTITLES) .setContentId("https://some-url/caption_fr.vtt") .setLanguage("fr") .build(); MediaTrack frenchAudio = new MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO) .setName("French Audio") .setContentId("trk0001") .setLanguage("fr") .build();
Tracks gruppieren
Sie können mehrere Tracks in einem Medienelement gruppieren. Dies wird durch
MediaInfo
Eine Instanz von MediaInfo
erfasst ein Array von Tracks
und aggregiert andere Informationen zum Medienelement.
Aufbauend auf dem Beispiel kann Ihre App diese drei Medien-Tracks einem Medien-Track
indem Sie eine Liste dieser drei Tracks
MediaInfo.Builder.setMediaTracks(List)
Deine App muss Tracks in einem MediaInfo
so verknüpfen, bevor sie geladen wird
an den Empfänger senden.
val tracks: MutableList<MediaTrack> = ArrayList<MediaTrack>() tracks.add(englishSubtitle) tracks.add(frenchSubtitle) tracks.add(frenchAudio) val mediaInfo = MediaInfo.Builder(url) .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED) .setContentType(getContentType()) .setMetadata(getMetadata()) .setMediaTracks(tracks) .build()
List tracks = new ArrayList(); tracks.add(englishSubtitle); tracks.add(frenchSubtitle); tracks.add(frenchAudio); MediaInfo mediaInfo = MediaInfo.Builder(url) .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED) .setContentType(getContentType()) .setMetadata(getMetadata()) .setMediaTracks(tracks) .build();
Tracks entfernen
Entfernen aller Tracks des aktuellen Mediums (z. B. Deaktivieren der drei
in diesem Beispiel), rufen Sie
MediaInfo.Builder.setMediaTracks(List)
und übergeben eine leere Liste von IDs.
Titel aktualisieren
Deine App kann einen oder mehrere Tracks aktivieren, die mit den Medien verknüpft waren
nachdem die Medien geladen wurden, indem Sie
RemoteMediaClient.setActiveMediaTracks(long[])
und die IDs der zu aktivierenden Titel übergeben. In diesem Beispiel wird die
Französische Untertitel und französische Audioversion:
// the ID for the French subtitle is '2' and for the French audio '3' remoteMediaClient.setActiveMediaTracks(longArrayOf(2, 3)) .setResultCallback(ResultCallback { mediaChannelResult: RemoteMediaClient.MediaChannelResult -> if (!mediaChannelResult.status.isSuccess) { Log.e(TAG, "Failed with status code:" + mediaChannelResult.status.statusCode ) } })
// the ID for the French subtitle is '2' and for the French audio '3' remoteMediaClient.setActiveMediaTracks(new long[]{2, 3}) .setResultCallback(mediaChannelResult -> { if (!mediaChannelResult.getStatus().isSuccess()) { Log.e(TAG, "Failed with status code:" + mediaChannelResult.getStatus().getStatusCode()); } });
Texttracks bearbeiten
TextTrackStyle
schließt die Stilinformationen eines Text-Tracks ein. Nach dem Erstellen oder Aktualisieren
einem vorhandenen TextTrackStyle-Element hinzugefügt, kannst du diesen Stil auf den aktuell abgespielten
Medienelement über den Aufruf
RemoteMediaClient.setTextTrackStyle
,
wie hier:
// the ID for the French subtitle is '2' and for the French audio '3' remoteMediaClient.setTextTrackStyle(style) .setResultCallback(ResultCallback { mediaChannelResult: RemoteMediaClient.MediaChannelResult -> if (!mediaChannelResult.status.isSuccess) { Log.e(TAG, "Failed to set the style, status code: " + mediaChannelResult.status.statusCode ) } })
remoteMediaClient.setTextTrackStyle(style) .setResultCallback(mediaChannelResult -> { if (!mediaChannelResult.getStatus().isSuccess()) { Log.e(TAG, "Failed to set the style, status code: " + mediaChannelResult.getStatus().getStatusCode()); } });
Ihre App sollte es Nutzern ermöglichen, den Stil für Texttracks zu aktualisieren, entweder mithilfe von die vom System oder von der App selbst vorgenommenen Einstellungen entsprechen. In Android KitKat können Sie die systemweiten Untertiteleinstellungen des Framework:
<ph type="x-smartling-placeholder">val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
TextTrackStyle textTrackStyle = TextTrackStyle.fromSystemSettings(context);
Bei Versionen vor KitKat gibt der obige Aufruf ein Objekt zurück, dessen sind nicht definiert, sodass Sie diese Felder in Ihrer App auf die Nutzerauswahl und einige Standardwerte angewendet. Sie können den folgenden Text gestalten: Tracking-Stilelemente:
- Farbe und Deckkraft des Vordergrunds (Text)
- Farbe und Transparenz des Hintergrunds
- Rahmentyp
- Rahmenfarbe
- Schriftgröße
- Schriftfamilie
- Schriftart
Stellen Sie die Textfarbe beispielsweise wie folgt auf Rot (FF) mit 50% Deckkraft (80) ein:
<ph type="x-smartling-placeholder">textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
textTrackStyle.setForegroundColor(Color.parseColor("#80FF0000"));
In KitKat und höheren Versionen sollten Sie Ihre App registrieren, um benachrichtigt zu werden.
wenn systemweite Untertiteleinstellungen aktualisiert werden. Dazu müssen Sie
implementieren
CaptioningManager.CaptioningChangeListener
in Ihrer App ein und registrieren Sie diesen Listener, indem Sie Folgendes aufrufen:
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
CaptioningManager.addCaptioningChangeListener(yourChangeListener);
Wenn deine App einen Rückruf erhält, der bestätigt, dass die Einstellungen für Untertitel geändert wurden,
müssen dann die neuen Einstellungen extrahieren und den Stil des Textes aktualisieren.
der gerade abgespielten Mediendatei durch Aufrufen von
RemoteMediaClient.setTextTrackStyle
und übergeben den neuen Stil.
Statusupdates erhalten
Wenn mehrere Sender mit demselben Empfänger verbunden sind, ist es wichtig, alle Sender über die Änderungen beim Empfänger zu informieren, auch wenn diese Änderungen die von anderen Absendern initiiert wurden.
Ihre App sollte zu diesem Zweck eine
RemoteMediaClient.Listener
und
RemoteMediaClient.ProgressListener
Wenn die
TextTrackStyle
werden alle verbundenen Absender benachrichtigt
über die beiden oben registrierten Listener zugreifen. In diesem Fall wird das Empfänger-SDK
wird nicht überprüft, ob sich der neue Stil vom vorherigen unterscheidet
benachrichtigt trotzdem alle verbundenen Absender. Wenn jedoch der Status
aktive verfolgt Änderungen, nur die RemoteMediaClient.ProgressListener
in
werden verbundene Absender benachrichtigt.
CORS-Anforderungen erfüllen
Für adaptives Mediastreaming für Google Cast ist Folgendes erforderlich: CORS-Header, aber auch einfache MP4-Dateien Für Medienstreams ist CORS erforderlich, wenn sie Titel enthalten. Wenn Sie Tracks aktivieren möchten Für alle Medien müssen Sie CORS sowohl für Ihre Track-Streams als auch für Ihre Medien aktivieren. Streams. Wenn Sie keine CORS-Header für einfache MP4-Medien haben, und anschließend einen einfachen Untertiteltrack hinzufügen, könnt ihr zum Streamen Ihrer Medien, es sei denn, Sie aktualisieren Ihren Server mit der entsprechenden CORS-Header. Außerdem müssen Sie mindestens die folgenden Header zulassen: Content-Type, Accept-Encoding und Range. Die letzten beiden Überschriften sind zusätzliche Header, die Sie zuvor vielleicht nicht benötigten.