Eigentlich sind wir als Apple Developer ziemlich verwöhnt, was die Darstellung unterschiedlicher Inhalte in der iOS- und tvOS-Entwicklung angeht. Von einfachen Texten über Grafiken bis hin zu Kartenmaterial und Websites steht für viele mediale Inhalte ein passendes View-Objekt in den Bibliotheken von Apple zur Verfügung. Nur eine Sache scheint sich nicht so trivial zu gestalten: die Wiedergabe von Videos.
Erfreulicherweise lässt sich auch die in ihrer einfachsten Form sehr komfortabel unter iOS und tvOS umsetzen. Abgesehen davon, dass sich auch eine Instanz der WKWebView
-Klasse aus dem WebKit-Framework zur Videowiedergabe zweckentfremden lässt, ist es mit wenigen Zeilen Code möglich, Videos auf Basis von AVKit und AVFoundation in Apps wiederzugeben.
In diesem Artikel gehe ich auf die einfachste Form ein, um Videos mit den genannten Frameworks in iOS- und tvOS-Apps abzuspielen. Es sind noch weitaus komplexere Konfigurationen möglich, doch die würden den Rahmen dieses Artikels sprengen und von der zu lösenden Aufgabe zu sehr ablenken.
Die Basis: AVPlayer und AVPlayerViewController
Zwei Klassen sind nötig, um eine einfache Videowiedergabe unter iOS und tvOS umzusetzen. Die erste ist AVPlayer
aus dem AVFoundation-Framework. Diese Klasse kümmert sich um die Wiedergabe und Steuerung eines Videos. Um eine passende Instanz zu erstellen, reicht es, ein Video auf Basis einer URL mithilfe des init(url:)
-Initializers zu übergeben.
Die zweite wichtige Klasse ist AVPlayerViewController
aus dem AVKit-Framework. Wie der Name bereits andeutet, ist diese Klasse von UIViewController
abgeleitet und für die Darstellung des Videos verantwortlich. Sie kümmert sich auch um die Bereitstellung von Schaltflächen und Funktionen zur Steuerung der Wiedergabe, beispielsweise zum Pausieren oder vor- und zurückspringen. Eine Instanz dieser Klasse erstellt man schlicht mithilfe des Standard-Initializers init()
.
Beide Instanzen werden letztlich durch die player
-Property der AVPlayerViewController
-Klasse miteinander verbunden. Dieser Property weist man die AVPlayer
-Instanz zu, deren Video wiedergegeben werden soll.
Alles, was dann noch nötig ist, um die Videowiedergabe zu starten, ist das Einblenden des AVPlayerViewController
. Das kann man beispielsweise durch Aufruf der Methode present(_:animated:completion:)
aus einem anderen View-Controller heraus bewerkstelligen. Um nach dem Anzeigen des AVPlayerViewController
gleich noch mit dem Abspielen des Videos zu beginnen (ohne dass der Nutzer selbst noch die Wiedergabe explizit starten muss), kann man noch die play()
-Methode auf der zugehörigen AVPlayer
-Instanz aufrufen.
Und das war‘s auch schon! Mit diesen wenigen Schritten lässt sich eine iOS- und tvOS-App um die Möglichkeit der Videowiedergabe ergänzen. Im folgenden Listing seht ihr ein Beispiel, wie das ganze in der Praxis aussehen kann. Es zeigt einen View-Controller, der über einen Button verfügt, über den eine Videowiedergabe gestartet werden soll. Nach Betätigen des Buttons werden eine AVPlayerViewController
– sowie AVPlayer
-Instanz erstellt, wobei die AVPlayer
-Instanz dem AVPlayerViewController
über dessen player
-Property zugewiesen wird. Anschließend folgt die Anzeige des AVPlayerViewController
sowie der automatische Start des Videos.
class VideoPlaybackViewController: UIViewController {
private let videoURL = URL(string: "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_adv_example_hevc/master.m3u8")!
@IBAction func playVideo() {
let videoPlayerController = AVPlayerViewController()
let videoPlayer = AVPlayer(url: videoURL)
videoPlayerController.player = videoPlayer
present(videoPlayerController, animated: true) {
videoPlayer.play()
}
}
}
Beispielprojekt TS-VideoPlayback
Auf meinem GitHub-Account findet ihr ein vollständiges Beispielprojekt auf Basis des gezeigten Codes. Es verfügt über ein iOS- und ein tvOS-Target, um das Projekt auf diesen beiden Plattformen ausführen zu können. Die App zeigt nach dem Start einen Button mit dem Titel Video Playback an, über den die Wiedergabe eines Testvideos gestartet wird (dazu ist eine Internetverbindung erforderlich).
Das Projekt findet ihr über den folgenden Link: https://github.com/Sillivan88/TS-VideoPlayback
Fazit
Zwar gibt es nicht ein einfach vorgefertigtes View-Element, das man als iOS- oder tvOS-Entwickler in seine App einbauen kann, um darüber Videos abzuspielen (von dem möglichen Workaround mit einer WKWebView
einmal abgesehen). Dafür erhält man mit AVKit und AVFoundation zwei mächtige Frameworks, die über eine Vielzahl von Funktionen zur Videowiedergabe verfügen. Und wie wir gesehen haben, ist das einfache Abspielen eines Videos mit wenigen Befehlen erledigt.
Euer Thomas
Weiterführende Links zum Artikel
TS-VideoPlayback-Projekt auf GitHub: https://github.com/Sillivan88/TS-VideoPlayback
Schreibe einen Kommentar