Überblick
Der Bild-in-Bild-Modus (PIP) ermöglicht Benutzern Multitasking auf ihren Geräten. Mit dieser Funktion können Sie Apps erstellen, bei denen ein kleines Videowiedergabefenster an einer Ecke des Bildschirms angeheftet ist, während der Benutzer andere Aufgaben ausführt.

Merkmale
Die Bild-in-Bild-Funktionalität der Brightcove Native SDKs unterstützt die folgenden Funktionen:
- Wenn ein Benutzer ein Bild im Bildmodus durch Klicken auf das PIP-Symbol in der Steuerleiste eingibt, kann ein Entwickler programmgesteuert in den PIP-Modus wechseln.
- Der Benutzer kann das PIP-Fenster um die Ecken des Bildschirms ziehen, um es an der bequemsten Stelle zu platzieren.
- Der Benutzer kann das Video im PIP-Fenster anhalten und wiedergeben oder vollständig entfernen. Der Benutzer kann das Video auch wieder auf das In-App-Erlebnis maximieren.
- Der PIP-Modus funktioniert über der App, dem Gerätehintergrund und anderen Anwendungen.
Unterstützte Versionen
Der Bild-in-Bild-Modus wird mit den folgenden Versionen unterstützt:
Gerätebetriebssystemversion
- Android: Oreo 8.0+ (API-Level 26+)
- iOS: 10.0+
Native SDK-Version
- Android: Brightcove Native SDK für Android Version 6.1.0+
- iOS: Brightcove Native SDK für iOS Version 6.4.4 und höher
Android-Implementierung
Die folgenden Themen helfen Ihnen beim Einstieg in die Bild-in-Bild-Funktion:
Weitere Informationen finden Sie unter Android Anleitung zur Bild-in-Bild-Unterstützung.
Verwenden von BrightcovePlayer
Der einfachste Weg, um mit der Verwendung von Bild in Bild zu beginnen, besteht darin, Ihre Aktivität zu verlängern BrightcovePlayer
. Gehen Sie dazu folgendermaßen vor:
- In deiner style.xml Datei, aktivieren Sie die Bild-in-Bild-Schaltfläche, indem Sie den folgenden Code hinzufügen:
<style name="BrightcoveControlBar" parent="BrightcoveControlBarDefault"> <item name="brightcove_picture_in_picture">true</item> </style>
- In deiner AndroidManifest.xml Datei, Bild-in-Bild-Unterstützung erklären für die Aktivität, indem Sie Folgendes hinzufügen:
<activity android:name="VideoActivity" android:resizeableActivity="true" android:supportsPictureInPicture="true" android:configChanges= "screenSize|smallestScreenSize|screenLayout|orientation" ...
Dies ist ein wichtiger Schritt. Wenn Sie es nicht deklarieren, wenn ein Benutzer die Bild-in-Bild-Schaltfläche im Brightcove Media Controller drückt, und
IllegalStateException
wird geworfen:java.lang.IllegalStateException: enterPictureInPictureMode: Current activity does not support picture in picture
Wenn Sie in den Bild-im-Bild-Modus wechseln, wird die Größe der Aktivität selbst geändert, wobei alle Aktivitätskomponenten im Bild-im-Bild-Fenster erhalten bleiben. Um dies zu vermeiden und eine einfachere Implementierung zu ermöglichen, wechselt die Brightcove-Videoansicht automatisch in den Vollbildmodus, um die Breite und Höhe des übergeordneten Layouts anzupassen und nur das Video im Bild-in-Bild-Fenster anzuzeigen. Sobald Sie diesen Modus verlassen, kehrt die Brightcove-Videoansicht in ihren ursprünglichen Zustand zurück.
Wenn Sie in Ihrer App kein Bild-in-Bild möchten, können Sie die Bild-in-Bild-Schaltfläche deaktivieren, indem Sie den folgenden Code in Ihr style.xml Datei:
<style name="BrightcoveControlBar" parent="BrightcoveControlBarDefault">
<item name="brightcove_picture_in_picture">false</item>
</style>
Verwenden einer regulären Aktivität
Wenn Sie eine Aktivität verwenden, die sich nicht erstreckt BrightcovePlayer
, müssen Sie zusätzlich zur Unterstützung von Bild-in-Bild-Unterstützung, wie im vorherigen Abschnitt erwähnt, einige zusätzliche Schritte ausführen:
- Öffne das MainActivity.java Datei.
- In dem
onCreate
Methode der Aktivität, registrieren Sie die Aktivität bei BrightcovePictureInPictureManager
:PictureInPictureManager.getInstance().registerActivity(Activity, BrightcoveVideoView)
- In dem
onDestroy
-Methode, heben Sie die Registrierung der Aktivität auf:PictureInPictureManager.getInstance().unregisterActivity(Activity)
- Überschreiben Sie die
onPictureInPictureModeChanged
Aktivitätsmethode und AufrufonPictureInPictureModeChanged()
Methode wie unten gezeigt:@Override public void onPictureInPictureModeChanged (boolean isInPictureInPictureMode, Configuration newConfig) { super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); PictureInPictureManager.getInstance().onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); }
- Überschreiben Sie schließlich die
onUserLeaveHint()
Aktivitätsmethode und AufrufonUserLeaveHint()
Wie nachfolgend dargestellt:@Override public void onUserLeaveHint () { super.onUserLeaveHint(); PictureInPictureManager.getInstance().onUserLeaveHint(); }
Nachdem Sie diese Schritte ausgeführt haben, wird die Bild-in-Bild-Schaltfläche automatisch im Brightcove Media Controller angezeigt. Sie können Bild in Bild auch programmgesteuert wie folgt auslösen:
PictureInPictureManager.getInstance().enterPictureInPictureMode()
Bild in Bild anpassen
Sie können das Verhalten und die Darstellung des Bild-im-Bild-Fensters über die PictureInPictureManager
. Sie können beispielsweise das Seitenverhältnis des Fensters ändern oder Untertitel für Ihre Videos aktivieren/deaktivieren.
Android Oreo bietet nativ drei Parameter, die angepasst werden können:
- Seitenverhältnis
setAspectRatio(Rational)
- Hinweis zur Quellgrenze
setSourceRectHint(Rect)
- Liste der Remote-Aktionen
setUserActions(List<RemoteAction>)
Benutzeraktionen
Brightcove fügt RemoteAction
standardmäßig ein hinzu, das die Play/Pause
Videoereignisse verarbeitet und die entsprechenden Symbole festlegt. Dies bedeutet, dass die Standardeinstellung RemoteAction
wird der Liste der von Ihnen festgelegten Remote-Aktionen wie folgt hinzugefügt:
setUserActions
Beachten Sie, dass Sie nur eine begrenzte Anzahl von Aktionen festlegen können. Um das zu bekommen maximale Anzahl von Aktionen , rufen Sie Folgendes auf:
Activity.getMaxNumPictureInPictureActions()
Untertitel
Sie können Closed Captions aktivieren/deaktivieren, wenn Sie ein Video im Bild-in-Bild-Modus abspielen, indem Sie Folgendes im inPictureInPictureManager
.
setClosedCaptionsEnabled(boolean)
Untertitel sind auf Smartphones standardmäßig deaktiviert, auf Tablets jedoch aktiviert. Um die Größe der Closed Captions während der Wiedergabe im Bild-in-Bild-Modus zu reduzieren, rufen Sie Folgendes auf, um einen Wert zwischen 0
und 1.0f
.
setClosedCaptionsReductionScaleFactor(float)
Standardmäßig ist die Größe der Untertitel im Bild-im-Bild-Modus 0.5f
oder 50 % der Originalgröße. Schließlich, um das Bild im Bildmodus einzugeben, wenn die Aktivität onUserLeaveHint()
aufgerufen wird, setzen Sie Folgendes auf true
:
setOnUserLeaveEnable(boolean)
Parameter
Um das aktuelle Bild in Bildparametern abzurufen, können Sie Folgendes aufrufen:
PictureInPicture.getBrightcovePictureInPictureParams()
Dieser Aufruf gibt das BrightcovePictureInPictureParams
Objekt zurück, das die Getter für alle zuvor besprochenen Parameter enthält.
iOS-Implementierung
Um mit Bild in Bild zu beginnen, fügen Sie hinzu showPictureInPictureButton
zu BCOVPUIPlayerViewOptions
. Bei Einstellung auf "true" wird den Player-Steuerelementen auf unterstützten Geräten eine Bild-in-Bild-Schaltfläche hinzugefügt.
Bild in Bild ist eines der neue Funktionen mit iOS 14.
Weitere Einzelheiten finden Sie unter:
- Die Bild im Bild Abschnitt der Brightcove Native SDK für iOS-Referenz
- Äpfel Bild-in-Bild in einem benutzerdefinierten Player übernehmen dokumentieren
Ein Codebeispiel finden Sie im Einfache Videowiedergabe-App.
Einschränkungen
Android
- Bild-in-Bild funktioniert nur auf Geräten mit Android Oreo oder höher
- Es wird derzeit nicht für Android TV unterstützt
- Videos mit Anzeigen werden nicht unterstützt
- 360-Videos werden nicht unterstützt
iOS
- Picture in Picture wird von den serverseitigen Anzeigen (SSAI) von Brightcove unterstützt, aber PIP wird nicht von clientseitigen Anzeigen, einschließlich IMA, FreeWheel oder Pulse, unterstützt.
- 360-Videos werden nicht unterstützt
Bekannte Probleme
Android
- Wir haben festgestellt, dass Widevine-geschützte Videos, die im Bild-in-Bild-Modus abgespielt werden, auf dem Pixel C mit Android 8.0 transparent oder schwarz werden. Das Problem ist auf demselben Gerät mit Android 8.1 nicht reproduzierbar.