[SWIFT] Bild-in-Bild ab iOS14

1. Zuallererst

Picture-in-Picture, das bereits auf dem iPad eingeführt wurde, ist jetzt mit iOS kompatibel. Ich werde von nun an den Ablauf der Einführung in die Anwendung beschreiben.

2. Über Bild-in-Bild

Durch die Einführung von Bild-in-Bild ist die Videowiedergabe in anderen Apps möglich.

Darüber hinaus unterstützt die Anwendung Bild-in-Bild, Wenn die automatische Wiedergabe aktiviert ist, wird sie gestartet, wenn Sie die Home-Taste drücken.

2-1. Über die automatische Wiedergabe von Bild-in-Bild

Wenn Ihre Anwendung Bild-in-Bild unterstützt In der Einstellungs-App gibt es eine Verhaltenseinstellung, wenn Sie während des Betrachtens die Home-Taste drücken.

2-1-1. Elemente, die der Einstellungs-App hinzugefügt wurden

Ich glaube nicht, dass der durchschnittliche iPhone-Nutzer davon Kenntnis hat. Es wird an der Stelle hinzugefügt, an der Sie ungefähr 2 Ebenen der Einstellungsanwendung tauchen.

Artikel iOS14 iPadOS13
Hierarchie Einstellungen → Allgemein → Bild in Bild Einstellungen → Startbildschirm und Dock → Multitasking
Artikelname Bild-in-Bild automatisch abspielen Bild im Bild
Erläuterungstext Wenn diese Option aktiviert ist, wird das Video auch dann in der Überlagerung abgespielt, wenn Sie die Home-Taste drücken. das Gleiche

2-1-2. Verhaltenseinführung unterstützter Apps

Als Nächstes habe ich untersucht, wie sich das Verhalten ändert, je nachdem, ob die Einstellung für die automatische Wiedergabe von Bild zu Bild aktiviert / deaktiviert ist. Ich überprüfte auch, ob es einen anderen Draht gab, der das Bild in Bild starten würde.

Verhalten der TV-App (echter Apfel) </ b> https://apps.apple.com/jp/app/apple-tv/id1174078549

Operation Autoplay ON Autoplay AUS
Drücken Sie die Home-Taste Wechseln Sie zum Startbildschirm und starten Sie Bild-in-Bild Übergang zum Startbildschirm, Wiedergabe stoppt und Audio stoppt * 1
Drücken Sie die Bild-in-Bild-Taste Wechseln Sie zum Startbildschirm und starten Sie Bild-in-Bild Wechseln Sie zum Startbildschirm und starten Sie Bild-in-Bild
Wischen Sie auf dem Wiedergabebildschirm nach unten Die Anzeige stoppt Die Anzeige stoppt
  • 1 ・ ・ ・ Die Stimme kann vom Kontrollzentrum aus wieder aufgenommen werden </ b>.

Zuckungsverhalten </ b>

Operation Autoplay ON Autoplay AUS
Drücken Sie die Home-Taste Wechseln Sie zum Startbildschirm und starten Sie Bild-in-Bild Übergang zum Startbildschirm, Wiedergabe stoppt und Audio stoppt * 1
Drücken Sie die Bild-in-Bild-Taste Wechseln Sie zum Startbildschirm und starten Sie Bild-in-Bild Wechseln Sie zum Startbildschirm und starten Sie Bild-in-Bild
Wischen Sie auf dem Wiedergabebildschirm nach unten Proprietärer Minispieler startet Proprietärer Minispieler startet
  • 1 ・ ・ ・ Die Stimme kann vom Kontrollzentrum aus wieder aufgenommen werden </ b>.

2-1-3. Verhaltensübersicht

Damit der Benutzer Bild-in-Bild startet Bedienen Sie mit der Home-Taste und bereiten Sie eine Bild-in-Bild-Taste vor.

Das Verhalten beim Drücken der Home-Taste folgt den Betriebssystemeinstellungen </ b>. Wenn Sie die Bild-in-Bild-Taste drücken, starten Sie Bild-in-Bild </ b> wie gewohnt.

3. Eigentlich vorstellen

3-1. Voraussetzungen

Es gibt "AVPlayerView", "AVPlayerViewController" und "AVPlayerLayer", um den Player zu implementieren. Dieses Mal werden wir jedoch die Implementierung mit "AVPlayerLayer" beschreiben.

3-2. Entsprechende Punkte zur Einführung

3-2-1 Überprüfen Sie, ob Bild-in-Bild unterstützt wird

Überprüfen Sie dies, da es möglicherweise nicht von Betriebssystemen wie iOS12 unterstützt wird.

3-2-2 Bereiten Sie die Wiedergabe von Bild-in-Bild vor

Informieren Sie das Betriebssystem darüber, dass das Bild-in-Bild abgespielt und vorbereitet wird.

3-2-3. Warten Sie, bis das Bild im Bild wiedergegeben werden kann

Warten Sie, bis das Betriebssystem für die Bild-in-Bild-Wiedergabe bereit ist.

3-2-4. Starten Sie die Wiedergabe von Bild zu Bild

Der Startbefehl wird nur ausgeführt, wenn Sie mit der Bild-in-Bild-Schaltfläche beginnen.

3-3. Beispiel-App anzeigen

https://developer.apple.com/documentation/avkit/adopting_picture_in_picture_in_a_custom_player

SamplePlayer.swift


func setupPictureInPicture() {
    // Ensure PiP is supported by current device.
    if AVPictureInPictureController.isPictureInPictureSupported() {
        // Create a new controller, passing the reference to the AVPlayerLayer.
        pictureInPictureController = AVPictureInPictureController(playerLayer: playerLayer)
        pictureInPictureController.delegate = self
        
        pipPossibleObservation = pictureInPictureController.observe(\AVPictureInPictureController.isPictureInPicturePossible,
                                                                    options: [.initial, .new]) { [weak self] _, change in
            // Update the PiP button's enabled state.
            self?.pictureInPictureButton.isEnabled = change.newValue ?? false
        }
    } else {
        // PiP isn't supported by the current device. Disable the PiP button.
        pictureInPictureButton.isEnabled = false
    }
}

@IBAction func togglePictureInPictureMode(_ sender: UIButton) {
    if pictureInPictureController.isPictureInPictureActive {
        pictureInPictureController.stopPictureInPicture()
    } else {
        pictureInPictureController.startPictureInPicture()
    }
}

AVPictureInPictureController.isPictureInPictureSupported() Entspricht 3-2-1. Hier wird festgestellt, ob das Zielgerät Bild-in-Bild unterstützt.

AVPictureInPictureController(playerLayer: playerLayer) Entspricht 3-2-2. Ich erstelle einen AVPictureInPictureController. Wenn Sie diesen AVPictureInPictureController erstellen, wird er automatisch gedrückt, wenn die Home-Taste gedrückt wird. Die Bild-in-Bild-Wiedergabe beginnt.

AVPictureInPictureController.isPictureInPicturePossible Entspricht 3-2-3. Zwischen der Generierung von AVPictureInPictureController und seiner Aktivierung liegt eine Verzögerung von mehreren Sekunden </ b>. Da es sich dynamisch ändert, scheint es, dass die Beispiel-App beobachten verwendet. Wenn Sie Rx verwenden, ist es meiner Meinung nach möglich, die Parameter mit Rx zu überwachen.

pictureInPictureController.startPictureInPicture() Entspricht 3-2-4. Fordert einen Start an, wenn die Bild-in-Bild-Taste gedrückt wird, nachdem sie fertig ist. Es ist nicht erforderlich, wenn die Home-Taste gedrückt wird, um die automatische Wiedergabe zu starten.

3-4. Detaillierte Notizen usw.

Erstellen Sie AVPictureInPictureController

Wie im vorherigen Abschnitt beschrieben, gibt es eine Verzögerung von der Generierung von "AVPictureInPictureController" bis zu seiner Aktivierung. Wenn der Prozess nach dem Drücken der Taste gestartet wird, ist die Reaktion daher schlecht.

isPictureInPicturePossible wird wahr, startet jedoch möglicherweise nicht

Wird derzeit untersucht </ b> Wenn "AVPictureInPictureController" generiert wird, wird es für einen Moment "wahr", kehrt aber sofort zu "falsch" zurück. Es mag ein Phänomen sein, das nur in meiner Umgebung auftritt, aber ich werde es nur für den Fall beschreiben.


Das Obige ist eine grobe Darstellung von Bild in Bild. Es kann in mehr als einem Dutzend Zeilen eingeführt werden. Warum also nicht?

Recommended Posts