Medientracks verwenden

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">
</ph> <ph type="x-smartling-placeholder">
</ph>
Kotlin
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()
<ph type="x-smartling-placeholder">
</ph>
Java
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.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Kotlin
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()
<ph type="x-smartling-placeholder">
</ph>
Java
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:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Kotlin
// 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
                    )
                }
    })
<ph type="x-smartling-placeholder">
</ph>
Java
// 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:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Kotlin
// 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
                    )
                }
    })
<ph type="x-smartling-placeholder">
</ph>
Java
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">
</ph> <ph type="x-smartling-placeholder">
</ph>
Kotlin
val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
<ph type="x-smartling-placeholder">
</ph>
Java
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">
</ph> <ph type="x-smartling-placeholder">
</ph>
Kotlin
textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
<ph type="x-smartling-placeholder">
</ph>
Java
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:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Kotlin
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
<ph type="x-smartling-placeholder">
</ph>
Java
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.