AVPlayer — konsep kunci, fitur, dan penggunaan

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

AVPlayer adalah framework pemutar media dari Apple, bagian dari AVFoundation yang menyediakan pemutaran audio dan video di iOS, macOS, tvOS, dan visionOS. AVPlayer mendukung berbagai format — dari file MP4 lokal hingga streaming HLS adaptif — melalui API tunggal dengan akselerasi perangkat keras decoding pada chip Apple Silicon. Menurut data Apple WWDC (2024), AVPlayer digunakan di 90% aplikasi iOS yang bekerja dengan media, termasuk Apple TV, Music, dan Photos.

Poin utama

  • AVPlayer — adalah framework pemutar media Apple dari AVFoundation untuk semua platform Apple.
  • Akselerasi perangkat keras — AVPlayer menggunakan VideoToolbox untuk decoding di GPU, mengurangi konsumsi daya.
  • HLS — dukungan native untuk HTTP Live Streaming dengan perpindahan bitrate adaptif otomatis.
  • Picture in Picture — dukungan bawaan untuk mode “gambar dalam gambar” di iPad, iPhone, dan Mac.
  • DRM — integrasi dengan FairPlay Streaming untuk melindungi konten premium.

Apa itu AVPlayer?

AVPlayer — adalah komponen utama framework AVFoundation, bertanggung jawab atas pemutaran konten multimedia di semua platform Apple. Diperkenalkan di iOS 4.0 (2010) sebagai pengganti MPMoviePlayerController yang usang, AVPlayer menyediakan kontrol tingkat rendah atas pemutaran dengan kemampuan penyesuaian parameter decoding, sinkronisasi audio dan video, serta integrasi dengan layanan sistem seperti AirPlay dan Picture in Picture.

Tidak seperti pemutar pihak ketiga, AVPlayer mendapatkan keuntungan akselerasi perangkat keras pada chip Apple Silicon. Decoding video dilakukan melalui VideoToolbox menggunakan mesin media khusus seri M (Media Engine), memungkinkan pemutaran 8K HDR dengan konsumsi daya minimal. Untuk HEVC (H.265) dan ProRes, decoding dilakukan pada blok chip khusus, tanpa membebani CPU.

AVPlayer terintegrasi erat dengan ekosistem Apple: dukungan Handoff untuk mentransfer pemutaran antar perangkat, AirPlay 2 untuk streaming ke Apple TV, audio spasial dengan pelacakan kepala dinamis, dan sinkronisasi dengan kontrol sistem melalui MPNowPlayingInfoCenter. Integrasi ini menjadikan AVPlayer standar de facto untuk semua aplikasi yang bekerja dengan media di platform Apple.

AVFoundation dan hierarki kelas

Framework AVFoundation menyediakan hierarki tiga tingkat untuk pemutaran: AVAsset (metadata dan informasi tentang konten), AVPlayerItem (status dan pengelolaan instance konten tertentu), dan AVPlayer (pengelolaan pemutaran). Arsitektur ini memungkinkan pemisahan pemuatan metadata, persiapan pemutaran, dan proses pemutaran itu sendiri, yang sangat penting untuk streaming HLS dengan banyak varian bitrate.

AVAsset mewakili model konten media — file atau streaming. AVAsset tidak dapat diputar dengan sendirinya; ia berisi track (AVAssetTrack), metadata (commonMetadata), informasi durasi, dan karakteristik lainnya. Dari AVAsset dibuat AVPlayerItem, yang kemudian dapat diteruskan ke AVPlayer untuk diputar.

Fitur utama AVPlayer

AVPlayer menyediakan seperangkat fitur yang mencakup sebagian besar skenario pemutaran — dari pemutaran file sederhana hingga siaran langsung kompleks dengan DRM. Mari kita lihat fungsi utama dengan contoh penerapannya.

FiturDeskripsiPlatform
File lokalMP4, MOV, M4V, AVI, MKV (melalui ekstensi)iOS, macOS, tvOS
HLSHTTP Live Streaming dengan ABR adaptifSemua platform Apple
FairPlay DRMKonten HLS terlindungi dengan lisensi streamingiOS, tvOS, macOS
Picture in PictureJendela video mengambang di atas aplikasi lainiPad, iPhone (iOS 14+), Mac
AirPlay 2Transmisi nirkabel ke Apple TV dan speakerSemua platform
Audio spasialDolby Atmos dan pelacakan dinamisiOS 15+, macOS 13+
HDRDolby Vision, HDR10, HLG dengan dukungan layariOS 11+, macOS 10.13+

Dukungan HLS dan perpindahan adaptif

AVPlayer memiliki dukungan native untuk HLS tanpa perlu menginstal pustaka tambahan. Saat memutar streaming HLS, AVPlayer secara otomatis mengelola perpindahan bitrate adaptif menggunakan algoritma ABR bawaan yang dioptimalkan untuk platform Apple. Algoritma ini tidak hanya mempertimbangkan bandwidth jaringan, tetapi juga kondisi termal perangkat — saat terlalu panas, AVPlayer dapat menurunkan bitrate untuk mengurangi beban prosesor.

Untuk streaming HLS dengan FairPlay Streaming, AVPlayer secara otomatis menangani perolehan dan pembaruan lisensi melalui delegat AVContentKeySession. Pengembang harus mengimplementasikan protokol AVContentKeySessionDelegate, yang dipanggil oleh pemutar saat perlu mendapatkan atau memperbarui kunci dekripsi. Ini adalah satu-satunya cara untuk melindungi konten HLS di platform Apple, karena Widevine tidak didukung di iOS.

Picture in Picture

PiP — mode yang memungkinkan pengguna terus menonton video di jendela mengambang saat beralih antar aplikasi. Di iPad dan iPhone (iOS 14+) AVPlayer terintegrasi dengan AVPictureInPictureController untuk mengaktifkan mode ini. Di macOS 15+ PiP juga tersedia, tetapi diaktifkan melalui menu sistem atau tombol di jendela pemutar.

Cara menggunakan AVPlayer di aplikasi iOS

Integrasi AVPlayer dalam aplikasi iOS dapat dilakukan dengan dua cara: melalui AVPlayerViewController tingkat tinggi (untuk skenario umum) atau langsung melalui AVPlayer + AVPlayerLayer (untuk kustomisasi antarmuka penuh). Mari kita lihat kedua pendekatan dalam Swift.

Integrasi melalui AVPlayerViewController

AVPlayerViewController — komponen UI siap pakai yang menyediakan kontrol bawaan: play/pause, mundur, volume, AirPlay, PiP, dan mode layar penuh. Integrasi minimal hanya memerlukan beberapa baris kode: membuat instance AVPlayer, meneruskannya ke AVPlayerViewController, dan menampilkan controller di layar.

swift
import AVKit

let url = URL(string: "https://example.com/video.mp4")!
let asset = AVAsset(url: url)
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: playerItem)

let controller = AVPlayerViewController()
controller.player = player
controller.allowsPictureInPicturePlayback = true

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

Integrasi langsung melalui AVPlayerLayer

Untuk aplikasi dengan UI kustom, gunakan AVPlayerLayer — lapisan Core Animation yang me-render video di dalam UIView mana pun. Pendekatan ini memberikan kontrol penuh atas antarmuka: Anda dapat menambahkan kontrol, animasi, dan lapisan tambahan di atas video.

swift
class VideoPlayerView: UIView {

    var player: AVPlayer? {
        get { (layer as! AVPlayerLayer).player }
        set { (layer as! AVPlayerLayer).player = newValue }
    }

    override class var layerClass: AnyClass {
        AVPlayerLayer.self
    }
}

// Penggunaan:
let playerView = VideoPlayerView(frame: view.bounds)
playerView.player = AVPlayer(url: url)
view.addSubview(playerView)

Mengelola siklus hidup AVPlayer

Pengelolaan siklus hidup pemutar yang benar sangat penting untuk stabilitas aplikasi. AVPlayer harus dibuat saat layar muncul dan dibebaskan saat ditutup. Saat aplikasi masuk ke latar belakang, disarankan untuk menjeda pemutaran guna menghemat sumber daya dan menghindari sanksi App Review untuk pemutaran latar belakang tanpa kebutuhan yang jelas.

AVPlayerLayer dan menampilkan video

AVPlayerLayer — adalah lapisan Core Animation, turunan dari CALayer, yang menyediakan rendering video di layar. Tidak seperti UIView, AVPlayerLayer bekerja langsung dengan GPU melalui Metal atau OpenGL, memastikan latensi output bingkai minimal. Memahami cara kerja AVPlayerLayer diperlukan untuk mengimplementasikan antarmuka pemutaran kustom.

Konfigurasi videoGravity

Properti videoGravity menentukan bagaimana video muat dalam batas lapisan. AVLayerVideoGravity.resizeAspect (mempertahankan rasio aspek dengan bilah hitam) — nilai default untuk AVPlayerViewController. resizeAspectFill (mengisi seluruh layar dengan pemotongan) digunakan untuk mode layar penuh. resize (mendistorsi rasio aspek ke ukuran lapisan) jarang digunakan, terutama untuk aplikasi analitik.

Sinkronisasi dengan thread utama

AVPlayerLayer me-render video secara real-time, tetapi semua operasi pemutar (start, pause, seek) harus dilakukan di thread utama. Nilai kunci untuk diamati — timeControlStatus, rate, status, dan error — dilacak melalui KVO (Key-Value Observing) atau API async/await modern, diperkenalkan di iOS 16 melalui metode AVPlayer dengan dukungan Swift Concurrency.

swift
let player = AVPlayer(url: url)
let statusObservation = player.observe(
    \.status,
    options: [.new, .initial]
) { player, _ in
    switch player.status {
    case .readyToPlay:
        player.play()
    case .failed:
        handleError(player.error)
    default:
        break
    }
}

Dukungan subtitle dan track alternatif

AVPlayer mendukung subtitle bawaan dalam format VTT, CEA-608, dan ITT (iTunes Timed Text). Pemilihan track audio dan subtitle dilakukan melalui AVMediaSelectionGroup dan AVMediaSelectionOption. Pengaturan subtitle pengguna (font, ukuran, warna) dibaca dari pengaturan Aksesibilitas sistem dan secara otomatis diterapkan ke AVPlayerLayer, jika tidak ditentukan secara eksplisit dalam kode.

Mengelola pemutaran dan skenario lanjutan

Untuk aplikasi produksi, integrasi dasar AVPlayer seringkali memerlukan konfigurasi tambahan: caching segmen HLS, bekerja dengan FairPlay DRM, integrasi dengan sistem “Now Playing”, dan implementasi algoritma pemilihan bitrate kustom.

Caching HLS melalui AVAssetResourceLoader

AVAssetResourceLoader — satu-satunya cara untuk mencegat pemuatan segmen HLS dan mengimplementasikan caching. Delegat AVAssetResourceLoaderDelegate menerima permintaan pemuatan kunci dan segmen, memungkinkan penyimpanan lokal dan pengembalian dari cache pada permintaan berulang. Ini sangat berguna untuk aplikasi yang beroperasi dalam kondisi jaringan tidak stabil.

swift
let asset = AVURLAsset(url: hlsURL)
asset.resourceLoader.setDelegate(
    resourceLoaderDelegate,
    queue: DispatchQueue(label: "com.app.resourceloader")
)
let playerItem = AVPlayerItem(asset: asset)

FairPlay Streaming — integrasi DRM

FairPlay Streaming (FPS) — standar Apple untuk melindungi konten HLS. Untuk integrasi FPS, perlu mengimplementasikan protokol AVContentKeySessionDelegate yang menangani permintaan untuk mendapatkan kunci dekripsi. Prosesnya meliputi: mendapatkan SPC (Server Playback Context) dari pemutar, mengirim ke server lisensi, menerima CKC (Content Key Context) dan mengirimkannya kembali ke AVContentKeySession.

swift
class DRMDelegate: NSObject, AVContentKeySessionDelegate {

    func contentKeySession(
        _ session: AVContentKeySession,
        didProvide keyRequest: AVContentKeyRequest
    ) {
        // 1. Dapatkan SPC dari keyRequest
        // 2. Kirim SPC ke server lisensi
        // 3. Dapatkan CKC dan teruskan ke keyRequest.processContentKeyResponse
    }
}

Now Playing dan kontrol sistem

Untuk menampilkan informasi tentang pemutaran saat ini di Layar Kunci, Pusat Kontrol, dan Apple Watch, digunakan MPNowPlayingInfoCenter dari MediaPlayer.framework. AVPlayer tidak memperbarui Now Playing secara otomatis — pengembang harus secara manual mengatur metadata (judul, artis, sampul, progres) saat status pemutaran berubah. Untuk memperbarui progres, digunakan timer reguler atau observe(\.timeControlStatus).

Remote Command Center — layanan sistem lain yang memungkinkan pengendalian pemutaran dari layar terkunci, AirPods, dan CarPlay. MPRemoteCommandCenter mendaftarkan handler untuk perintah play, pause, nextTrack, previousTrack, changePlaybackPosition, dan skipForward/skipBackward. AVPlayer tidak memproses perintah ini secara otomatis — pengembang harus menghubungkannya dengan panggilan player.play(), player.pause(), dan player.seek().

Pertanyaan yang sering diajukan

Apa perbedaan AVPlayer dengan AVAudioPlayer?

AVPlayer — pemutar universal untuk audio dan video dengan dukungan streaming, HLS, DRM, dan sinkronisasi dengan kontrol sistem. AVAudioPlayer — pemutar audio sederhana untuk memutar file audio lokal tanpa dukungan streaming dan akselerasi perangkat keras video. Untuk video dan HLS gunakan AVPlayer, untuk audio sederhana — AVAudioPlayer.

Apakah AVPlayer mendukung pemutaran YouTube?

Tidak, AVPlayer tidak mendukung pemuatan langsung konten YouTube, karena YouTube menggunakan pemutar sendiri berbasis DASH dan format kepemilikan. Untuk integrasi YouTube dalam aplikasi iOS, gunakan YouTube IFrame Player API melalui WKWebView atau pustaka resmi youtube-ios-player-helper.

Bagaimana cara mengimplementasikan pemutaran audio latar belakang dengan AVPlayer?

Untuk audio latar belakang, tambahkan Audio, AirPlay and Picture in Picture di Background Modes proyek Xcode Anda. Konfigurasikan AVAudioSession dengan kategori .playback: try AVAudioSession.sharedInstance().setCategory(.playback). AVPlayer akan melanjutkan pemutaran di latar belakang, dan Layar Kunci serta Pusat Kontrol akan menampilkan kontrol melalui MPNowPlayingInfoCenter.

Mengapa AVPlayer tidak memutar video dari YouTube, Vimeo, atau Twitter?

Layanan ini menggunakan perlindungan DRM dan solusi pemutar sendiri. AVPlayer hanya dapat memutar konten melalui tautan langsung ke file media atau daftar putar HLS. Video dari YouTube dan platform serupa dibungkus dalam iframe atau pemutar JavaScript yang tidak kompatibel dengan AVPlayer. Gunakan SDK resmi mereka atau WebView untuk menampilkan.

Bagaimana cara mengurangi latensi dalam siaran langsung melalui AVPlayer?

Untuk Low-Latency HLS, konfigurasikan AVPlayerItem dengan preferredForwardBufferDuration = 2.0 (detik) dan kelola jeda secara otomatis saat tertinggal dari batas langsung: gunakan player.currentItem?.configuredTimeOffsetFromLive dan player.currentItem?.canPlayReverse. Apple merekomendasikan LL-HLS dengan latensi 2-4 detik dengan konfigurasi yang benar di server dan klien.

Ringkasan

  • AVPlayer — pemutar media universal Apple dengan akselerasi perangkat keras pada Apple Silicon untuk iOS, macOS, tvOS, dan visionOS.
  • HLS — dukungan native dengan perpindahan bitrate adaptif otomatis tanpa pustaka tambahan.
  • FairPlay Streaming — satu-satunya sistem DRM untuk HLS terlindungi di platform Apple.
  • Integrasi — AVPlayerViewController untuk mulai cepat atau AVPlayerLayer untuk UI kustom.
  • Caching HLS diimplementasikan melalui AVAssetResourceLoaderDelegate dengan mencegat permintaan segmen.
  • Now Playing — pembaruan metadata manual untuk Pusat Kontrol dan Layar Kunci melalui MPNowPlayingInfoCenter.
  • Direkomendasikan menggunakan AVPlayer untuk semua proyek media di platform Apple dengan persyaratan HLS.

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