Codeschnipsel mit dem Native SDK für Android

In diesem Thema finden Sie eine Sammlung von Codeausschnitten, die Sie bei der Entwicklung mit dem SDK als Referenz verwenden können. Ausführlichere Lösungen finden Sie in den Android-Player-Beispielen.

Inhaltsverzeichnis

Werbung

Analytik

Bildunterschriften

Konzepte

Inhaltssicherheit (DRM)

Live-Streams

Wiedergabe

Spielersteuerung

Wiedergabelisten

Videoinhalte

Anpassen der Steuerelemente für Android TV

Sie können der Steuerleiste Schaltflächen für Geräte oder Android TV hinzufügen. Die folgenden Schritte führen Sie durch das Hinzufügen einer Vollbildschaltfläche zur Steuerleiste für Android TV:

  1. Öffne das Angepasste Bedienelemente Beispiel-App. Wir werden dies als Ausgangspunkt verwenden. Sehen Sie sich die Beispiel-Apps an Liesmich Datei für Details zum Anpassen von Player-Steuerelementen.
  2. Öffne das res/layout/land/my_media_controller.xml Datei in Android Studio.
  3. Kopiere das Button Element für die full_screen Taste. Der Code sollte ungefähr so aussehen:
    <Button
    style="@style/BorderlessButton"
    android:id="@id/full_screen"
    android:padding="4dp"
    android:layout_gravity="center_vertical"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:visibility="visible"
    android:text="@string/brightcove_controls_enter_full_screen"/>
  4. Öffne das res/layout/my_tv_media_controller.xml Datei in Android Studio.
  5. Füge das kopierte ein Button Element in diese Layoutdatei. Die Position der Elemente bestimmt ihre Position in der Kontrollleiste.
  6. Scrollen Sie zum Anfang des res/layout/my_tv_media_controller.xml Datei. Stellen Sie sicher, dass die Stileigenschaft auf eingestellt ist @style/BrightcoveControlBar.TV.Custom. Der Code sollte so aussehen:
    <?xml version="1.0" encoding="utf-8"?>
    <com.brightcove.player.mediacontroller.BrightcoveControlBar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:bmc="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="Overdraw, InconsistentLayout"
    android:id="@+id/brightcove_control_bar"
    android:background="@color/bmc_background"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="8dp"
    
    android:orientation="horizontal"
    android:layout_gravity="bottom"
        style="@style/BrightcoveControlBar.TV.Custom">
  7. Öffne das res/values/styles.xml Datei in Android Studio.
  8. Zum style Element mit a name Wert von BrightcoveControlBar.TV.Custom , füge ein . hinzu item -Element für die Vollbild-Schaltfläche und setzen Sie es auf true um es anzuzeigen.
    <style name="BrightcoveControlBar.TV.Custom">
    <item name="brightcove_vr_mode">false</item>
      <item name="brightcove_full_screen">true</item>
    </style>
  9. Das ist es. Führen Sie die Beispiel-App auf einem physischen oder virtuellen Android TV-Gerät aus. Sie sollten die Vollbild-Schaltfläche in der Steuerleiste sehen.
    Vollbild-Schaltfläche
    Vollbild-Schaltfläche

Vollbildmodus

Sie können den Vollbildmodus mithilfe von Code verwalten.

Dauer für Livestreams abrufen

Um die Dauer eines Livestreams abzurufen, können Sie die MAX_POSITION. Dies gibt Ihnen die größte durchsuchbare Position für einen Live-Stream (dh am weitesten, an dem Sie die Bildlaufleiste ziehen können). Ihr Code sollte folgendermaßen aussehen:

brightcoveVideoView.getEventEmitter().on(EventType.PROGRESS, new EventListener() {
  @Override
  public void processEvent(Event event) {
  int duration = (int) event.properties.get(Event.MAX_POSITION);
  }
});

Erkennen der Netzwerkbandbreite

Es kann Anwendungsfälle geben, in denen Sie die Netzwerkbandbreite innerhalb Ihrer App erkennen müssen, z. B. beim Arbeiten mit Downloads.

Um die Bandbreite zu erkennen, verwendet das Native SDK für Android die BandwidthMeter Klasse von ExoPlayer bereitgestellt. Unsere PlayerBandwidthMeter Klasse verwendet die BandwidthMeter Klasse und bietet die getBitrateEstimate -Methode, die die geschätzte Bitrate zurückgibt.

Weitere Informationen finden Sie in den folgenden Punkten:

Hier ist ein Beispiel:

ExoPlayerVideoDisplayComponent exoPlayer = (ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay();
exoPlayer.getBandwidthMeter().addEventListener(myHandler, new BandwidthMeter.EventListener() {@
	Override public void onBandwidthSample(int elapsedMs, long bytesTransferred, long bitrateEstimate) {}
});

Abrufen der ExoPlayer-Instanz

Es kann vorkommen, dass Sie das ExoPlayer-Objekt abrufen müssen, um Eigenschaften zu ändern, die nicht über das Brightcove Native SDK verfügbar gemacht werden. Eine Instanz dieses Objekts wird erstellt, nachdem das Video eingestellt wurde. Sie müssen also warten, bis die DID_SET_VIDEO Veranstaltung.

Sie können die ExoPlayer-Instanz wie folgt abrufen:

// Get the ExoPlayer instance
eventEmitter.on(EventType.DID_SET_VIDEO, new EventListener() {
  @Override
  public void processEvent(Event event) {
    VideoDisplayComponent videoDisplayComponent = brightcoveVideoView.getVideoDisplay();
    if (videoDisplayComponent instanceof ExoPlayerVideoDisplayComponent) {
      // Get ExoPlayer
      ExoPlayer exoPlayer = ((ExoPlayerVideoDisplayComponent) videoDisplayComponent).getExoPlayer();
      if (exoPlayer instanceof SimpleExoPlayer) {
        // Get SimpleExoPlayer
        SimpleExoPlayer simpleExoPlayer = (SimpleExoPlayer) exoPlayer;
        Log.v(TAG, "onDID_SET_VIDEO: ExoPlayer = " + simpleExoPlayer);
      }
    }
  }
});

Ein Beispiel für die Änderung des AudioAttribute -Eigenschaft für den ExoPlayer finden Sie im Festlegen von Audioattributen für die Exoplayer-Instanz Forumsbeitrag.

URL für Miniaturbilder abrufen

Sie können die Miniaturansichten oder Videostandbilder aus Ihrer Brightcove-Bibliothek verwenden. Verwenden Sie den folgenden Code, um die URL für Ihre Bilder abzurufen:

Für Video Cloud-Kunden, die den Edge-Katalog (com.brightcove.player.edge.Catalog) verwenden, können Sie die Miniaturansichts-URL wie folgt abrufen:

String thumbnailUrl = video.getProperties().get("thumbnail").toString();

Wenn Sie feststellen, dass das Miniaturbild zu klein ist, können Sie stattdessen das Video-Standbild abrufen:

String videoStillUrl = video.getProperties().get("stillImageUri").toString();

Google Analytics

Wenn Sie den Brightcove-Player und die Katalogklasse verwenden, werden Videoanalysen automatisch erfasst und in Ihrem Video Cloud-Analysemodul angezeigt. Für zusätzliche Messwerte können Sie Ihrer App Google Analytics hinzufügen.

Gehen Sie wie folgt vor, um Google Analytics in Ihre App zu integrieren:

  1. Fügen Sie Ihrem Projekt das Google Services-Plug-in hinzu.
  2. Rufen Sie eine Google-Konfigurationsdatei ab und fügen Sie sie Ihrem Projekt hinzu.
  3. Erweitern Sie die Anwendung und stellen Sie eine Hilfsmethode bereit, die Ihren Anwendungs-Tracker zurückgibt. Es sollte ähnlich aussehen wie die google-services Analytics-Anwendung.
  4. Rufen Sie in einer separaten Klasse, die den BrightcovePlayer erweitert, die gemeinsam genutzte Tracker-Instanz ab:
    // Obtain the shared Tracker instance
    AnalyticsApplication application = (AnalyticsApplication) getApplication();
    tracker = application.getDefaultTracker();
  5. Überschreiben Sie geeignete Methoden, um Bildschirmänderungen zu protokollieren und/oder benutzerdefinierte Ereignisse zur Nachverfolgung zu senden.

Detaillierte Schritte finden Sie im Dokument von Google zu Fügen Sie Ihrer Android-App Analytics hinzu.

Laden eines Remote-Videos und eines Posterbilds

Nur Brightcove Player-Kunden verwenden Video-Assets von einem Remote-Server. Führen Sie diese Schritte aus, um ein Video und ein Posterbild zu laden, die sich beide auf einem Remote-Server befinden:

  1. In dem onCreate() -Methode erstellen Sie nach dem Definieren der Videoansicht ein Videoobjekt aus Ihrem auf einem Remoteserver gehosteten Video. Stellen Sie die DeliveryType passend zu Ihrem Videotyp.

    Video video = Video.createVideo("https://sdks.support.brightcove.com/assets/videos/hls/greatblueheron/greatblueheron.m3u8",
      DeliveryType.HLS);
  2. Laden Sie ein Remote-Bild, das als Posterbild verwendet werden soll, bevor die Videowiedergabe beginnt.

    try {
      java.net.URI myposterImage = new java.net.URI("https://solutions.brightcove.com/bcls/assets/images/Great-Blue-Heron.png");
      video.getProperties().put(Video.Fields.STILL_IMAGE_URI, myposterImage);
    } catch (URISyntaxException e) {
      e.printStackTrace();
    }
  3. Fügen Sie das Video zur Ansicht hinzu und starten Sie die Videowiedergabe.

    brightcoveVideoView.add(video);
    brightcoveVideoView.start();
  4. Überprüfen Sie, ob Ihr onCreate() Methode sieht wie folgt aus:

    @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
    
        // Optional: For Brightcove Player customers to register their apps
        Analytics analytics = brightcoveVideoView.getAnalytics();
        analytics.setAccount("your account Id");
    
        // Define a video from a remote server
        Video video = Video.createVideo("https://sdks.support.brightcove.com/assets/videos/hls/greatblueheron/greatblueheron.m3u8", DeliveryType.HLS);
    
        // Load a remote poster image
        try {
            java.net.URI myposterImage = new java.net.URI("https://solutions.brightcove.com/bcls/assets/images/Great-Blue-Heron.png");
            video.getProperties().put(Video.Fields.STILL_IMAGE_URI, myposterImage);
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    
        // Add video to the view
        brightcoveVideoView.add(video);
        // Start video playback
        brightcoveVideoView.start();
      }

Manuelles Hinzufügen von DRM-Inhalten

Als Brightcove Player-Kunde möchten Sie möglicherweise DRM-geschützte Inhalte von Ihrem eigenen Server verwenden. Sie können DRM-Inhalte wie folgt manuell laden:

import com.brightcove.player.display.WidevineMediaDrmCallback;

Video video = Video.createVideo("https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears.mpd");
video.getProperties().put(WidevineMediaDrmCallback.DEFAULT_URL, "https://proxy.uat.widevine.com/proxy?video_id=&provider=widevine_test");
brightcoveVideoView.add(video);
brightcoveVideoView.start();

Methoden: synchron oder asynchron?

Hier sind einige der asynchronen Methoden im Native Player SDK für Android:

  • Die start() , seekTo() und stopPlayback() Methoden sind asynchron, weil sie ein Ereignis ausgeben, das andere Komponenten im System verarbeiten müssen.
  • Die clear() -Methode ist synchron in Bezug auf das Aktualisieren der Liste, aber asynchron in Bezug auf das Entladen des aktuellen Videos.

Stummschaltung/Aufhebung der Stummschaltung des Players

Sie können den Player programmgesteuert stummschalten oder die Stummschaltung aufheben. Brightcove empfiehlt, nach Möglichkeit BrightcoveExoPlayerVideoView zu verwenden.

BrightcoveExoPlayerVideoView

Bei Verwendung des BrightcoveExoPlayerVideoView , können Sie den Player wie folgt programmgesteuert stummschalten oder die Stummschaltung aufheben:

float volume = 100F;
...
brightcoveVideoView.getEventEmitter().on(EventType.DID_SET_VIDEO, new EventListener() {
  @Override
  public void processEvent(Event event) {
    setMute(true);
    brightcoveVideoView.start();
  }
});
...
private void setMute(boolean mute) {
  volume = mute ? 0F : 100F;
  Map<string, Object> properties = new HashMap<>();
  properties.put(Event.VOLUME, volume);
  brightcoveVideoView.getEventEmitter().emit(EventType.SET_VOLUME, properties);
}

BrightcoveVideoView

Wenn Sie die verwenden müssen BrightcoveVideoView , die Android verwendet Media Player , können Sie den Player mit dem folgenden Code programmgesteuert stummschalten oder die Stummschaltung aufheben:

float volume = 1F;
...
brightcoveVideoView.getEventEmitter().on(EventType.DID_SET_VIDEO, new EventListener() {
  @Override
  public void processEvent(Event event) {
    setMute(true);
    brightcoveVideoView.start();
  }
});
...
private void setMute(boolean mute) {
  volume = mute ? 0F : 1F;
  Map<String, Object> properties = new HashMap<>();
  properties.put(Event.LEFT_VOLUME, volume);
  properties.put(Event.RIGHT_VOLUME, volume);
  brightcoveVideoView.getEventEmitter().emit(EventType.SET_VOLUME, properties);
}

Offline-Wiedergabe mit DRM

Bei Videos, die für die Offline-Wiedergabe heruntergeladen wurden, kann der Download-Status auch im Benachrichtigungsbereich angezeigt werden. Der Benachrichtigungstitel wird auf den Videotitel eingestellt. Die Benachrichtigung wird entfernt, wenn der Download angehalten oder abgebrochen wird.

Benachrichtigungsstatus herunterladen
Download-Status Inhaltstext der Benachrichtigung Benachrichtigungssymbol
wird heruntergeladen R.string.odrm_download_running- Dies ist standardmäßig "Herunterladen ..."

Es wird ein Fortschrittsbalken angezeigt, der den Prozentsatz der Fertigstellung anzeigt.
Das standardmäßige animierte "Herunterladen"-Symbol der Plattform - android.R.drawable.stat_sys_download
Wiederholen R.string.odrm_download_waiting_retry- dies ist standardmäßig "Warten auf Wiederholung..."  
Gescheitert R.string.odrm_download_failed- dies ist standardmäßig "Fehlgeschlagen!"  
Vollendet R.string.odrm_download_complete- dies ist standardmäßig "Gespeichert" Das plattformstandardmäßige statische Symbol "heruntergeladen" - android.R.drawable.stat_sys_download_done

Für den Status „Wiederholen“ oder „Fehlgeschlagen“ wird der Benachrichtigungsuntertext basierend auf dem Fehlertyp auf eine geeignete Ressource gesetzt. Hier ist die vollständige Liste:

  • R.string.odrm_error_none
  • R.string.odrm_error_cannot_resume
  • R.string.odrm_error_device_not_found
  • R.string.odrm_error_file_already_exists
  • R.string.odrm_error_file_error
  • R.string.odrm_error_http_data_error
  • R.string.odrm_error_insufficient_space
  • R.string.odrm_error_too_many_redirects
  • R.string.odrm_error_unhandled_http_code
  • R.string.odrm_error_unknown

Paging mit der Playback API

Beim Abrufen Ihres Video Cloud-Inhalts von der Wiedergabe-API können Sie das Paging für eine Wiedergabeliste implementieren.

Um durch eine Reihe von Videos in einer Playlist zu blättern, verwenden Sie die folgenden Anforderungs-URL-Parameter:

  • limit- definiert die Anzahl der Videos, die von der Playback-API zurückgegeben werden sollen
  • offset- legt die Anzahl der Videos fest, die in einer Wiedergabeliste von der Playback-API übersprungen werden sollen

Die Abfrageparameter werden als a . an die Methode Catalog übergeben Map Objekt als Schlüssel-Wert-Paare. In diesem Beispiel werden 6 Videos zurückgegeben, beginnend mit dem 10. Video in der Playlist:

Map<String, String> queryParameters = new HashMap<>();
queryParameters.put("limit", "6");
queryParameters.put("offset", "9");

Catalog catalog = new Catalog(eventEmitter, "myAccount", "myPolicy");
catalog.findPlaylistByID("myPlaylistId", null, queryParameters, myListener);

Lokale Videos abspielen

Wenn Sie lokal gespeicherte MP4-Videos abspielen möchten, sollten Sie sie im Asset-Ordner der Anwendung speichern.

Uri video = Uri.parse("file:///android_asset/path/to/video.mp4");
brightcoveVideoView.add(Video.createVideo(video.toString()));
brightcoveVideoView.start();

Positionierung der Player-Bedienelemente auf der Unterseite

Standardmäßig befindet sich die Player-Steuerungsleiste direkt unter dem Video, wie hier gezeigt:

Player-Steuerung unter Video
Player-Steuerung unter Video

Sie können die Player-Steuerungsleiste auch so positionieren, dass sie sich unten in der Videoansicht befindet. Denn die Steuerung ist Teil der BrightcoveVideoView , indem Sie die Höhe auf einstellen match_parent , wird die Ansicht den gesamten Bildschirm umfassen. Wenn die Steuerelemente unten in der Ansicht angezeigt werden, bleibt das Video in der Mitte der Ansicht.

Spieler steuert unten
Player steuert den unteren Rand der Videoansicht

Es gibt zwei Möglichkeiten, dies zu tun. Der erste Ansatz folgt:

  1. Öffne das main/res/values/style.xml Datei für Ihr Projekt.
  2. Fügen Sie den folgenden XML-Code hinzu:

    <style name="BrightcoveControlBar" parent="BrightcoveControlBarDefault">
      <item name="brightcove_align">false</item>
    </style>

Oder Sie können Code innerhalb der MainActivity.java Datei wie folgt:

  1. Öffne das MainActivity.java Datei für Ihr Projekt.
  2. Nachdem Sie den Ereignissender erhalten haben, wie hier gezeigt:

    EventEmitter eventEmitter = brightcoveVideoView.getEventEmitter();

    Fügen Sie den folgenden Ereignis-Listener und Code hinzu. Wir warten bis nach dem DID_SET_VIDEO -Ereignis, um sicherzustellen, dass die Kontrollleiste erstellt wurde.

    eventEmitter.on(EventType.DID_SET_VIDEO, new EventListener() {
      @Override
      public void processEvent(Event event) {
        BrightcoveControlBar brightcoveControlBar = brightcoveVideoView.getBrightcoveMediaController().getBrightcoveControlBar();
        brightcoveControlBar.setAlign(false);
        }
    });

IMA-Anzeigen vorab laden

Um Anzeigen mit dem Native SDK für Android und dem IMA-Plug-in vorab zu laden, verwenden Sie die setEnablePreloading(true) Eigentum .

Gehen Sie folgendermaßen vor, um diese Eigenschaft zu verwenden:

  1. Ausgangspunkt ist die IMA-Beispiel-App.

  2. Suchen Sie die private void setupGoogleIMA() Funktion.

  3. Fügen Sie den Snippet-Codeblock vor der letzten Codezeile der Funktion hinzu.

    ImaSdkSettings imaSdkSettings = sdkFactory.createImaSdkSettings();
    AdsRenderingSettings adsRenderingSettings =
    ImaSdkFactory.getInstance().createAdsRenderingSettings();
    adsRenderingSettings.setEnablePreloading(true);
  4. Ergänzen Sie die adsRenderingSettings Parameter bis zur letzten Codezeile.

    googleIMAComponent = new GoogleIMAComponent(brightcoveVideoView, eventEmitter, true, adsRenderingSettings);

Suche ohne Werbung

Du kannst den ... benutzen adsDisabled Eigentum für die VideoPlaybackController um die Anzeigenwiedergabe zu deaktivieren, während Sie ein Video durchsuchen.

Gehen Sie folgendermaßen vor, um diese Funktion zu verwenden:

  1. Bekommen das VideoPlaybackController Instanz aus dem BrightcoveVideoView.

    VideoPlaybackController playbackController = brightcoveVideoView.getPlaybackController();
  2. Deaktivieren Sie die Anzeigenwiedergabe.

    playbackController.setAdsDisabled(true);
  3. Suchen Sie die gewünschte Zeitposition im aktuellen Video.
  4. Setzen Sie das normale Anzeigenverhalten fort.

    playbackController.setAdsDisabled(false);

Ihr Code sollte ungefähr so aussehen:

final VideoPlaybackController playbackController = brightcoveVideoView.getPlaybackController();
eventEmitter.on(EventType.VIDEO_DURATION_CHANGED, new EventListener() {
  @Override
  public void processEvent(final Event event) {
    playbackController.setAdsDisabled(true);
    brightcoveVideoView.seekTo(10000);
  }
});

eventEmitter.on(EventType.DID_SEEK_TO, new EventListener() {
  @Override
  public void processEvent(final Event event) {
    playbackController.setAdsDisabled(false);
  }
});

Puffergröße einstellen

Sie können in Erwägung ziehen, die Pufferlänge zu erhöhen, um die Pufferung im Player zu vermeiden, wenn die Lieferung des nächsten Segments vom CDN verzögert wird. Möglicherweise können Sie jedoch manuell nichts Besseres tun, als HLS bereits tut.

HLS ist darauf ausgelegt, sofort zu spielen und die Qualität zu verlieren, wenn es nicht mithalten kann. Auf diese Weise muss kein Puffer vorab geladen werden. Wenn es nicht mithalten kann, lädt es so viel wie möglich vom Video in bester Qualität, um Unterbrechungen zu vermeiden.

Beginnend mit dem Native SDK für Android v6.3.1 wurden dem SDK für die ExoPlayer 2-Implementierung die folgenden Klassen hinzugefügt:

  • LoadControlConfig
  • AllocatorConfig

Die in diesen Klassen festgelegten Werte werden verwendet, um den ExoPlayer . zu erstellen DefaultLoadControl -Objekt, das zum Erstellen der ExoPlayer-Instanz verwendet wird. Entwickler können die Puffergröße wie folgt steuern:

  1. Die LoadControlConfig und AllocatorConfig Klassen folgen den Builder-Mustern. Werte, die Sie in beiden Klassen festlegen können, spiegeln die Werte wider, die Sie in ihren Konstruktoren festlegen können.

    AllocatorConfig allocatorConfig = new AllocatorConfig.Builder().build();
    LoadControlConfig loadControlConfig = new LoadControlConfig.Builder()
    .setAllocatorConfig(allocatorConfig)
    .setMinBufferMs(X)
    .setMaxBufferMs(Y)
    .build();
  2. Werte, die nicht im Builder festgelegt sind, verwenden Standardwerte. Verwenden Sie die ExoPlayerVideoDisplayerComponent.setLoadControlConfig() Methode zum Einstellen der LoadControlConfig.

    brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
    ...
    ExoPlayerVideoDisplayComponent dc = (ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay();
    dc.setLoadControlConfig(loadControlConfig);

Bildunterschriften und Themen festlegen

Derzeit ist die BrightcoveCaptionPropertiesActivity wird in der Manifestdatei des Brightcove Player SDK festgelegt, sodass Entwickler sie nicht in ihren Anwendungen angeben müssen:

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.brightcove.player"
android:versionCode="1"
android:versionName="1.0">

<application>
<!-- If we don't register this Activity in the Manifest, apps using the SDK will crash when they try to access it. -->
<!-- During the app's build process, this manifest will be merged with the app-level one. -->
<activity android:name="com.brightcove.player.captioning.BrightcoveCaptionPropertiesActivity"/>
</application>
</manifest>

Die BrightcoveCaptionPropertiesActivity erbt das Standarddesign der Plattform, solange Sie Designs für Ihre App am <activity> Ebene im Manifest Ihrer App.

Wenn Sie ein einzelnes App-Theme im <application> Ebene, dann die BrightcoveCaptionPropertiesActivity erbt die Eigenschaften dieses Themas auf Anwendungsebene. Bei einigen Themen kann dies dazu führen, dass die Aktivität seltsam gestylt oder sogar unleserlich aussieht.

In diesen Fällen sollten Sie die BrightcoveCaptionPropertiesActivity in Ihrem eigenen Manifest und wenden Sie dort ein Thema an, etwa so:

<activity
android:name="com.brightcove.player.captioning.BrightcoveCaptionPropertiesActivity"
android:theme="@style/MyCustomCaptionSettingsTheme"/>

Festlegen von Standarduntertiteln

Wenn Ihr Video Untertitel in mehreren Sprachen verwendet, können Sie beim Starten der Wiedergabe programmgesteuert eine Standardsprache festlegen. Ihr Code sollte folgendermaßen aussehen:

brightcoveVideoView.getEventEmitter().once(EventType.CAPTIONS_LANGUAGES, new EventListener() {
  @Override
  public void processEvent(Event event) {
    brightcoveVideoView.setClosedCaptioningEnabled(true);
    brightcoveVideoView.setSubtitleLocale("fr");
  }
});

In-Manifest-Beschriftungen verwenden

Ein mit dem Native SDK für Android erstellter Player verwendet standardmäßig Sidecar-Untertitel. Diese Untertitel befinden sich im text_tracks Objekt der Playback-API-Antwort.

Um den Player für die Verwendung von Untertiteln aus dem Manifest zu konfigurieren, muss die CAPTION_SOURCES Eigenschaft aus dem Video-Objekt entfernt werden:

if (video.getProperties().get(Video.Fields.CAPTION_SOURCES) != null) {
    video.getProperties().remove(Video.Fields.CAPTION_SOURCES);
}

Einstellen der Spitzenbitrate

Um Ihnen bei der Implementierung einer Bitratenauswahl in Ihrem Player zu helfen, können Sie den folgenden Code verwenden, um die Spitzenbitrate festzulegen:

((ExoPlayerVideoDisplayComponent) videoView.getVideoDisplay()).setPeakBitrate(bitRate);

Einstellen der Wiedergaberate

Der ExoPlayer unterstützt die Anpassung der Wiedergabegeschwindigkeit für Videos, die auf Android-Geräten abgespielt werden. Weitere Informationen finden Sie in Googles Wiedergabe mit variabler Geschwindigkeit mit ExoPlayer dokumentieren.

Sie können die Wiedergabegeschwindigkeit mit dem folgenden Code steuern:

eventEmitter.on(EventType.DID_PLAY, new EventListener() {
  @Override
  public void processEvent(Event event) {

    //Get instance of ExoPlayer2
    ExoPlayerVideoDisplayComponent displayComponent = (ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay();
    ExoPlayer exoPlayer = displayComponent.getExoPlayer();

    //Set playback speed
    PlaybackParameters param = new PlaybackParameters(1.6f, 1.0f);
    exoPlayer.setPlaybackParameters(param);
  }
});

Einstellen des VR-Brillenmodus für 360°-Videos

Beim Abspielen eines 360°-Videos können Benutzer die Schaltfläche Video 360 in der Steuerleiste auswählen, um in den VR-Brillenmodus zu wechseln. Wenn Sie entweder die BrightcovePlayer oder BrightcovePlayerFragment Aktivität, dann ändert sich die Bildschirmausrichtung ins Querformat, wenn der VR-Brillenmodus aktiviert ist.

Wenn Sie eine benutzerdefinierte Aktivität verwenden, müssen Sie Folgendes hinzufügen:

brightcoveVideoView.getEventEmitter().on(EventType.CHANGE_ORIENTATION, new EventListener() {
  @Override
  public void processEvent(Event event) {
    int orientation = event.getIntegerProperty(Event.REQUESTED_ORIENTATION);
    setRequestedOrientation(orientation);
  }
});

Anzeigen/Ausblenden von Video-Standbildern

Das Standardverhalten beim Abrufen von Videos aus Ihrer Video Cloud-Bibliothek besteht darin, das Videostandbild anzuzeigen, bis die Wiedergabe beginnt.

Anzeigen des Video-Standbilds

Sie können das Video-Standbild jederzeit anzeigen, indem Sie a SET_VIDEO_STILL Veranstaltung mit a VIDEO_STILL -Eigenschaft auf den URI des Videostandbilds festgelegt.

Ausblenden des Video-Standbilds

Wenn Sie das Video automatisch wiedergeben, möchten Sie möglicherweise das Standbild des Videos ausblenden. Dazu können Sie auf die SET_VIDEO_STILL Ereignis und verhindern Sie das Standardverhalten wie folgt:

brightcoveVideoView.getEventEmitter().on(EventType.SET_VIDEO_STILL, new EventListener() {
  @Override
  public void processEvent(Event event) {
    event.preventDefault();
    event.stopPropagation();
  }
});

Player-Steuerelemente anzeigen

Standardmäßig werden die Player-Steuerelemente nach einigen Sekunden ausgeblendet. Der Benutzer kann die Steuerelemente anzeigen, indem er auf das Video tippt.

Wenn Sie möchten, dass die Player-Steuerelemente angezeigt werden, bis der Benutzer auf das Video tippt, können Sie das automatische Ausblenden wie folgt deaktivieren: (der benötigte Code ist markiert)

public class MainActivity extends BrightcovePlayer {
  private BrightcoveMediaController controller;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_main);
    brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);

    controller = new BrightcoveMediaController(brightcoveVideoView);
    controller.setShowHideTimeout(0);

    super.onCreate(savedInstanceState);

Wiedergabe mitten in einem Video starten

Manchmal müssen Sie die Wiedergabe möglicherweise irgendwo in der Mitte des Videos starten. Dazu können Sie anrufen BrightCoveVideoView.seekTo() bevor Sie die Wiedergabe starten.

catalog.findVideoByID(getString(R.string.videoId), new VideoListener() {
  @Override
  public void onVideo(Video video) {
    Log.v(TAG, "onVideo: video = " + video);

    brightcoveVideoView.getEventEmitter().on(EventType.DID_SET_VIDEO, new EventListener() {
    @Override
      public void processEvent(Event event) {
      brightcoveVideoView.seekTo(60000);
      brightcoveVideoView.start();
      }
    });
  brightcoveVideoView.add(video);
  brightcoveVideoView.pause();
  }
});

Videos austauschen

Dieses Beispiel zeigt einen Ansatz zum Austauschen von Videos im Player.

Einzelne Videos verwenden

Seit der clear() -Methode beim Entladen des aktuellen Videos asynchron ist, müssen Sie warten, bevor Sie dem Player ein neues Video hinzufügen. Hier sind zwei Möglichkeiten.

Verwenden einer Wiedergabeliste

Wenn Sie mit einer Playlist arbeiten, denken Sie daran, dass das Aufrufen der clear() -Methode entfernt alle Elemente der Wiedergabeliste. Sie können also eine IndexOutOfBounds Ausnahme beim Versuch, zum ersten Video in der Playlist zu springen.

Stattdessen können Sie Folgendes versuchen:

brightcoveVideoView.pause();
brightcoveVideoView.stopPlayback();
brightcoveVideoView.setCurrentIndex(0);

Zwischen Videos in einer Playlist wechseln

Wenn Sie eine Playlist verwenden, können Sie den folgenden Code verwenden, um zwischen den Videos in der Playlist zu wechseln:

private void setupControls(List<Video> videos) {
  previousVideoButton = (Button) findViewById(R.id.previous_video_button);
  nextVideoButton = (Button) findViewById(R.id.next_video_button);

  if (videos != null) {
    previousVideoButton.setEnabled(false);
    previousVideoButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
    int index = brightcoveVideoView.getCurrentIndex();
    int size = brightcoveVideoView.getList().size();
    previousVideoButton.setEnabled(index > 1);
    nextVideoButton.setEnabled((index + 1) < size);

    if (index > 0) {
    brightcoveVideoView.setCurrentIndex(index - 1);
    }
  }
});

nextVideoButton.setEnabled(videos.size() > 1);
nextVideoButton.setOnClickListener(new View.OnClickListener() {
  public void onClick(View view) {
    int index = brightcoveVideoView.getCurrentIndex();
    int size = brightcoveVideoView.getList().size();
    previousVideoButton.setEnabled(index >= 0);
    nextVideoButton.setEnabled((index + 2) < size);

    if ((index + 1) < size) {
    	brightcoveVideoView.setCurrentIndex(index + 1);
    }
  }
});
}
}