AVPlayerViewController: apa itu, cara integrasi di iOS

Penulis: IT Sectr Diterbitkan: 2026-05-23 Waktu membaca: 8 mnt

AVPlayerViewController adalah kontroler pemutar video bawaan di ekosistem Apple, dirancang untuk memutar konten media di iOS dan tvOS. Ini menyediakan antarmuka layar penuh dengan kontrol, dukungan subtitle, dan AirPlay tanpa perlu menulis UI khusus. Menurut Apple Developer Documentation, 2026, AVPlayerViewController terintegrasi dalam beberapa baris kode dan mendukung HLS, MP4, dan sebagian besar format media.

Poin utama

  • AVPlayerViewController adalah kontroler pemutaran video standar dari framework AVKit untuk iOS dan tvOS.
  • Ini menyediakan antarmuka pengguna siap pakai dengan bilah kontrol, tombol putar, dan indikator kemajuan.
  • Kontroler secara otomatis mendukung subtitle, trek audio, AirPlay, dan Picture in Picture.
  • Integrasi dilakukan melalui AVPlayer — objek dasar untuk mengelola pemutaran.
  • Pengembang dapat menyesuaikan tampilan kontrol, menambahkan tampilan overlay, dan memproses event melalui delegat.

Apa itu AVPlayerViewController?

AVPlayerViewController adalah komponen dari framework AVKit yang menyediakan antarmuka siap pakai untuk memutar video di aplikasi Apple. Ini membebaskan pengembang dari kebutuhan membuat pemutar khusus dari awal, menawarkan kontrol standar: putar/jeda, mundur, pengaturan volume, dan mode layar penuh.

Tidak seperti AVPlayerLayer tingkat rendah yang memerlukan pembuatan UI manual, AVPlayerViewController sepenuhnya mengelola siklus hidup pemutar. Kontroler secara otomatis menangani rotasi layar, beradaptasi dengan Safe Area di iPhone berponi, dan mendukung multitasking di iPad.

Menurut Apple Documentation (2026), AVPlayerViewController kompatibel dengan AVPlayer dan AVQueuePlayer, memungkinkan pemutaran file tunggal maupun daftar putar. URL dari penyimpanan lokal, streaming jaringan HLS, dan konten FairPlay terenkripsi didukung.

Sejarah dan versi AVPlayerViewController

Komponen ini muncul di iOS 8 bersama AVKit sebagai pengganti MPMoviePlayerController yang sudah usang. Di iOS 11 ditambahkan dukungan Picture in Picture dan tampilan subtitle. Di iOS 14 kontroler mendapat bilah kontrol yang dapat disesuaikan melalui delegat AVPlayerViewControllerDelegate. Mulai iOS 16, muncul dukungan untuk penggantian file media secara dinamis tanpa membuat ulang pemutar.

AVPlayerViewController modern dioptimalkan untuk layar ProMotion — kecepatan bingkai video secara otomatis disinkronkan dengan kecepatan penyegaran layar. Di tvOS komponen beradaptasi dengan antarmuka fokus Siri Remote, dan di macOS dengan mode jendela QuickTime Player.

Bagaimana AVPlayerViewController bekerja

Inti dari kontroler adalah hubungan antara AVPlayer dan AVPlayerItem. AVPlayer adalah objek pemutaran yang mengelola garis waktu, kecepatan, dan status. AVPlayerItem adalah pembungkus di sekitar file media tertentu yang berisi metadata, trek, dan informasi pemuatan.

Saat inisialisasi, AVPlayerViewController menerima referensi ke AVPlayer dan secara otomatis membuat AVPlayerLayer untuk menampilkan video. Kontroler berlangganan notifikasi KVO AVPlayer tentang perubahan status readyToPlay, kesalahan pemuatan, dan akhir pemutaran.

Kontrol (bilah transport) ditampilkan dengan mengetuk layar. Di iOS 15+ mereka mendukung kustomisasi melalui AVPlayerViewControllerCustomizationDelegate, memungkinkan menyembunyikan atau mengganti tombol standar.

Siklus hidup kontroler

Setelah kontroler dibuat dan AVPlayer ditetapkan, metode viewDidLoad dipanggil yang memulai persiapan streaming video. Ketika AVPlayerItem memasuki status AVPlayerItemStatusReadyToPlay, pemutar siap menampilkan bingkai. Saat metode play() dipanggil, decoding streaming video melalui Video Toolbox dimulai.

Saat meninggalkan layar, kontroler secara otomatis menjeda pemutaran dan membebaskan sumber daya decoder. Di iOS 13+ untuk mempertahankan pemutaran saat aplikasi diminimalkan, diperlukan konfigurasi Background Modes dan Audio Session. Menurut WWDC 2024, disarankan menggunakan AVPlayerPlaybackCoordinator untuk sinkronisasi dengan pusat media iOS.

Fitur utama AVPlayerViewController

Komponen ini menyediakan rangkaian fitur yang kaya langsung jadi, membuatnya menarik untuk sebagian besar proyek. Berikut adalah kemampuan utama yang tidak memerlukan kode tambahan.

  • Bilah transport dengan putar/jeda, mundur 15 detik, pengatur volume, dan penggeser kemajuan.
  • Dukungan subtitle — tampilan otomatis subtitle internal dan eksternal dalam format VTT, SRT, dan iTunes Timed Text.
  • AirPlay — kemampuan untuk streaming video ke Apple TV dan perangkat lain yang kompatibel dengan AirPlay.
  • Picture in Picture — pemutaran di jendela mengambang saat menekan tombol khusus (di iPad dan iPhone dengan iOS 14+).
  • Mode layar penuh — peralihan otomatis saat perangkat diputar dan saat mengetuk tombol perbesar.
  • Ubah kecepatan — kontrol internal untuk memilih kecepatan pemutaran (0.5x, 1.0x, 1.5x, 2.0x).
  • Konten terlindungi — dukungan asli FairPlay Streaming untuk konten HLS dengan DRM.

Bilah transport AVPlayerViewController

Bilah transport adalah bagian bawah antarmuka yang berisi tombol kontrol utama. Secara default, bilah disembunyikan setelah 3 detik tidak ada aktivitas pengguna dan muncul saat disentuh. Di iOS 16+ melalui delegat, visibilitas elemen individual dapat dikelola.

Dalam mode debug, bilah transport dapat dipaksa tampil melalui properti AVPlayerViewController.requiresLinearPlayback, yang juga memblokir kemampuan untuk menjeda video. Ini berguna untuk sisipan iklan dan konten pendidikan.

Integrasi AVPlayerViewController ke dalam proyek

Integrasi dasar kontroler tidak memakan lebih dari 10 baris kode. Pertama, perlu membuat instance AVPlayer dengan URL file media, kemudian meneruskannya ke AVPlayerViewController dan menampilkan kontroler di layar.

Membuat pemutar dasar di Swift

swift
import AVKit

let player = AVPlayer(url: URL(string: "https://example.com/video.mp4")!)
let playerVC = AVPlayerViewController()
playerVC.player = player

present(playerVC, animated: true) {
    player.play()
}

Setelah memanggil present, kontroler ditampilkan di seluruh layar. Video mulai dimuat dari jaringan dan segera setelah buffer mencapai ambang readyToPlay, pemutaran otomatis dimulai setelah memanggil play().

Mengonfigurasi AVPlayerItem untuk manajemen lanjutan

swift
let asset = AVAsset(url: videoURL)
let item = AVPlayerItem(asset: asset)

let metadata = AVMutableMetadataItem()
metadata.key = AVMetadataKey.commonKeyTitle
metadata.value = "Video saya"
item.addMetadata(metadata)

let player = AVPlayer(playerItem: item)
let playerVC = AVPlayerViewController()
playerVC.player = player

Penggunaan AVPlayerItem memberikan kontrol atas metadata, kode waktu, pemilihan trek audio, dan subtitle. Melalui AVPlayerItem juga dapat memantau kemajuan pemuatan, buffering, dan kesalahan jaringan dengan KVO pada properti status.

Menyesuaikan kontrol

Mulai iOS 11, pengembang dapat menyesuaikan bilah transport melalui protokol AVPlayerViewControllerDelegate. Metode playerViewController(_:willBeginFullScreenPresentationWithAnimationCoordinator:) dipanggil sebelum memasuki mode layar penuh dan memungkinkan persiapan UI.

Untuk menyembunyikan tombol individual, digunakan properti AVPlayerViewController.showsPlaybackControls. Jika disetel ke false, bilah transport hilang sepenuhnya, hanya menyisakan streaming video. Berguna untuk elemen overlay khusus.

Kustomisasi menggunakan delegat

swift
class CustomPlayerViewController: UIViewController {
    private let playerVC = AVPlayerViewController()

    override func viewDidLoad() {
        super.viewDidLoad()
        playerVC.delegate = self
        playerVC.showsPlaybackControls = true
        playerVC.entersFullScreenWhenPlaybackBegins = true
    }
}

extension CustomPlayerViewController: AVPlayerViewControllerDelegate {
    func playerViewController(
        _ playerViewController: AVPlayerViewController,
        willBeginFullScreenPresentationWithAnimationCoordinator coordinator: UIViewControllerTransitionCoordinator
    ) {
        // Tambahkan tombol overlay
    }

    func playerViewController(
        _ playerViewController: AVPlayerViewController,
        didUpdate legibleMediaSelection: AVMediaSelectionGroup
    ) {
        print("Bahasa subtitle baru dipilih")
    }
}

Delegat memungkinkan mencegat event perubahan subtitle, masuk dan keluar dari mode layar penuh, serta mulai dan berakhirnya Picture in Picture. Di WWDC 2024, Apple merekomendasikan menggunakan delegat untuk analitik — mencatat setiap transisi hingga 100 ms.

Bekerja dengan subtitle dan trek audio

AVPlayerViewController secara otomatis menampilkan semua subtitle dan trek audio yang tersedia, jika tertanam dalam file media atau ditentukan dalam manifes HLS. Pengguna dapat menggantinya melalui menu yang muncul saat mengetuk ikon subtitle di bilah transport.

Untuk streaming HLS, manifes M3U8 berisi daftar varian bahasa yang tersedia. AVPlayer memuat segmen subtitle yang sesuai dalam format WebVTT dan meneruskannya untuk rendering melalui AVPlayerLayer. Di iOS 16+ muncul dukungan untuk styling subtitle melalui AVTextStyleRule.

Pemilihan trek audio secara terprogram

swift
func selectAudioTrack(languageCode: String) {
    guard let group = player.currentItem?
        .asset.mediaSelectionGroup(forMediaCharacteristic: AVMediaCharacteristic.audible)
    else { return }

    for option in group.options {
        if option.extendedLanguageTag?.hasPrefix(languageCode) == true {
            player.currentItem?.select(option, in: group)
        }
    }
}

Metode selectAudioTrack mencari di antara opsi audio grup audiable varian yang extendedLanguageTag-nya cocok dengan kode bahasa yang diinginkan. Ini memungkinkan implementasi fitur “Audio asli” di aplikasi dengan konten multibahasa.

Picture in Picture di iPad

Mode Picture in Picture (PiP) memungkinkan menampilkan video di jendela mengambang di atas aplikasi lain. Di iPad, fitur ini tersedia sejak iOS 9, di iPhone sejak iOS 14. AVPlayerViewController secara otomatis menambahkan tombol PiP ke bilah transport saat ada langganan UIBackgroundModes.

Untuk mengaktifkan PiP, di Info.plist perlu menambahkan kunci UIBackgroundModes dengan nilai audio dan airplay. Setelah itu, tombol PiP muncul di kontroler, saat ditekan video mengecil ke jendela mengambang berukuran 192x108 titik.

Event PiP diproses melalui delegat: playerViewController(_:willStartPictureInPictureFromFullScreen:) dan playerViewController(_:didStopPictureInPicture:). Menurut Apple HIG, ukuran minimum jendela PiP harus setidaknya 120x68 titik untuk menjaga keterbacaan konten.

Pertanyaan yang sering diajukan

Apakah AVPlayerViewController mendukung pemutaran video YouTube?

Tidak, untuk video YouTube diperlukan penggunaan web-view WKWebView atau pustaka YouTube iOS Helper, karena YouTube menggunakan sistem DRM sendiri. AVPlayerViewController ditujukan untuk streaming media langsung melalui URL.

Bagaimana cara menonaktifkan bilah transport AVPlayerViewController?

Setel properti showsPlaybackControls ke false. Setelah itu layar tetap kosong — hanya streaming video. Untuk mengembalikan tombol khusus, tambahkan overlay melalui addSubview di atas kontroler.

Apakah AVPlayerViewController bekerja dengan siaran langsung HLS?

Ya, kontroler sepenuhnya mendukung HLS Live. Di bilah transport, indikator Live ditampilkan sebagai pengganti penggeser kemajuan. Penundaan tergantung pada konfigurasi HLS — minimal 6 detik pada pengaturan low-latency.

Bagaimana cara menangani kesalahan pemuatan video di AVPlayerViewController?

Berlanggananlah ke KVO properti AVPlayerItem.status. Saat terjadi kesalahan, status berubah menjadi .failed. Dapatkan detail melalui properti error di AVPlayerItem dan tampilkan alert dengan penjelasan kepada pengguna — sering kali masalahnya ada di jaringan atau URL yang salah.

Bisakah memuat video dari memori di AVPlayerViewController?

Ya, gunakan AVAsset dengan AVAssetResourceLoader khusus untuk menyediakan data dari RAM. Implementasikan delegat AVAssetResourceLoaderDelegate dan kembalikan byte dari buffer, bukan membaca dari disk.

Kesimpulan

  • AVPlayerViewController — komponen AVKit siap pakai untuk memutar video di iOS, iPadOS, dan tvOS dengan kode integrasi minimal.
  • Kontroler mendukung HLS, MP4, konten FairPlay terlindungi, subtitle, dan trek audio langsung jadi.
  • Untuk penggunaan dasar, cukup membuat AVPlayer dan meneruskannya ke kontroler — UI akan digambar secara otomatis.
  • Delegat AVPlayerViewControllerDelegate memungkinkan menyesuaikan bilah transport, mengelola PiP, dan perubahan subtitle.
  • Bilah transport disembunyikan setelah 3 detik tidak ada aktivitas, tetapi showsPlaybackControls memberikan kontrol penuh atas visibilitasnya.
  • Untuk Picture in Picture diperlukan aktivasi UIBackgroundModes audio dan airplay di Info.plist.
  • Saat terjadi kesalahan, gunakan KVO pada AVPlayerItem.status untuk mendapatkan detail dan menampilkannya kepada pengguna.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga