Ang AVPlayer ay isang media player framework mula sa Apple, bahagi ng AVFoundation na nagbibigay ng audio at video playback sa iOS, macOS, tvOS at visionOS. Sinusuportahan ng AVPlayer ang malawak na hanay ng mga format — mula sa lokal na MP4 file hanggang sa adaptive HLS stream — sa pamamagitan ng iisang API na may hardware acceleration decoding sa Apple Silicon chips. Ayon sa datos ng Apple WWDC (2024), ang AVPlayer ay ginagamit sa 90% ng iOS application na nagtatrabaho sa media, kabilang ang Apple TV, Music at Photos.
Mga Pangunahing Punto
AVPlayer — ay ang sentral na component ng AVFoundation framework, responsable sa pag-playback ng multimedia content sa lahat ng Apple platform. Ipinakilala sa iOS 4.0 (2010) bilang kapalit ng lumang MPMoviePlayerController, ang AVPlayer ay nagbibigay ng low-level control sa playback na may kakayahang fine-tuning ng decoding parameters, audio at video synchronization, pati na rin integrasyon sa system services tulad ng AirPlay at Picture in Picture.
Hindi tulad ng mga third-party player, ang AVPlayer ay nakakakuha ng mga benepisyo ng hardware acceleration sa Apple Silicon chips. Ang video decoding ay ginagawa sa pamamagitan ng VideoToolbox gamit ang dedikadong media engine ng M-series (Media Engine), na nagbibigay ng 8K HDR playback na may minimal na konsumo ng kuryente. Para sa HEVC (H.265) at ProRes, ang decoding ay ginagawa sa specialized blocks ng chip, hindi naglo-load ng CPU.
Ang AVPlayer ay malapit na isinama sa Apple ecosystem: support para sa Handoff para sa paglipat ng playback sa pagitan ng mga device, AirPlay 2 para sa streaming sa Apple TV, spatial audio na may dynamic head tracking at synchronization sa system controls sa pamamagitan ng MPNowPlayingInfoCenter. Ang mga integrasyong ito ay ginagawang de facto standard ang AVPlayer para sa lahat ng application na nagtatrabaho sa media sa Apple platforms.
Ang AVFoundation framework ay nagbibigay ng three-level hierarchy para sa playback: AVAsset (metadata at impormasyon tungkol sa content), AVPlayerItem (status at pamamahala ng specific instance ng content) at AVPlayer (pamamahala ng playback). Ang arkitekturang ito ay nagpapahintulot na paghiwalayin ang pag-load ng metadata, paghahanda para sa playback at ang playback process mismo, na lalong mahalaga para sa HLS stream na may maraming bitrate variants.
AVAsset ay kumakatawan sa modelo ng media content — file o stream. Ang AVAsset ay hindi mismo nai-play; naglalaman ito ng tracks (AVAssetTrack), metadata (commonMetadata), impormasyon ng tagal at iba pang katangian. Mula sa AVAsset ay ginagawa ang AVPlayerItem, na maaaring ipasa sa AVPlayer para sa playback.
AVPlayer ay nagbibigay ng set ng mga kakayahan na sumasaklaw sa karamihan ng playback scenarios — mula sa simpleng file playback hanggang sa complex live broadcast na may DRM. Tingnan natin ang mga key function na may halimbawa ng kanilang aplikasyon.
| Kakayahan | Paglalarawan | Mga Platform |
|---|---|---|
| Lokal na file | MP4, MOV, M4V, AVI, MKV (sa pamamagitan ng extensions) | iOS, macOS, tvOS |
| HLS | HTTP Live Streaming na may adaptive ABR | Lahat ng Apple platform |
| FairPlay DRM | Protektadong HLS content na may streaming license | iOS, tvOS, macOS |
| Picture in Picture | Lutang na video window sa ibabaw ng ibang apps | iPad, iPhone (iOS 14+), Mac |
| AirPlay 2 | Wireless transmission sa Apple TV at speakers | Lahat ng platform |
| Spatial audio | Dolby Atmos at dynamic tracking | iOS 15+, macOS 13+ |
| HDR | Dolby Vision, HDR10, HLG na may display support | iOS 11+, macOS 10.13+ |
AVPlayer ay may native support para sa HLS nang hindi kailangang mag-install ng mga karagdagang library. Sa pag-play ng HLS stream, awtomatikong pinamamahalaan ng AVPlayer ang adaptive bitrate switching gamit ang built-in ABR algorithm na optimized para sa Apple platforms. Ang algorithm ay isinasaalang-alang hindi lamang ang network bandwidth, kundi pati na rin ang thermal condition ng device — sa sobrang init, maaaring babaan ng AVPlayer ang bitrate upang mabawasan ang load ng processor.
Para sa HLS stream na may FairPlay Streaming, awtomatikong hinahawakan ng AVPlayer ang pagkuha at pag-renew ng mga license sa pamamagitan ng AVContentKeySession delegate. Ang developer ay dapat mag-implement ng AVContentKeySessionDelegate protocol, na tatawagin ng player kapag kailangan kumuha o mag-renew ng decryption key. Ito ang tanging paraan upang protektahan ang HLS content sa Apple platforms, dahil ang Widevine ay hindi supported sa iOS.
PiP — mode na nagpapahintulot sa user na magpatuloy sa panonood ng video sa isang lutang na window habang lumilipat sa pagitan ng mga apps. Sa iPad at iPhone (iOS 14+) ang AVPlayer ay nagsasama sa AVPictureInPictureController para i-activate ang mode na ito. Sa macOS 15+ ang PiP ay available din, ngunit naa-activate sa pamamagitan ng system menu o button sa player window.
Ang integrasyon ng AVPlayer sa iOS application ay maaaring gawin sa dalawang paraan: sa pamamagitan ng high-level na AVPlayerViewController (para sa tipikal na scenarios) o direkta sa pamamagitan ng AVPlayer + AVPlayerLayer (para sa buong customization ng interface). Tingnan natin ang parehong approach sa Swift.
AVPlayerViewController — ready-made UI component na nagbibigay ng built-in controls: play/pause, rewind, volume, AirPlay, PiP at full screen mode. Ang minimal integration ay nangangailangan lamang ng ilang linya ng code: gumawa ng AVPlayer instance, ipasa ito sa AVPlayerViewController at ipakita ang controller sa screen.
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()
}
Para sa mga app na may custom UI, gamitin ang AVPlayerLayer — Core Animation layer na nagre-render ng video sa loob ng anumang UIView. Ang approach na ito ay nagbibigay ng buong kontrol sa interface: maaari kang magdagdag ng sarili mong controls, animation at karagdagang layers sa ibabaw ng video.
class VideoPlayerView: UIView {
var player: AVPlayer? {
get { (layer as! AVPlayerLayer).player }
set { (layer as! AVPlayerLayer).player = newValue }
}
override class var layerClass: AnyClass {
AVPlayerLayer.self
}
}
// Paggamit:
let playerView = VideoPlayerView(frame: view.bounds)
playerView.player = AVPlayer(url: url)
view.addSubview(playerView)
Ang tamang pamamahala ng lifecycle ng player ay kritikal para sa stability ng application. Ang AVPlayer ay dapat gawin kapag lumitaw ang screen at i-release kapag ito ay sarado. Kapag pumunta ang app sa background, inirerekomenda na i-pause ang playback para makatipid ng resources at maiwasan ang App Review penalties para sa background playback nang walang malinaw na pangangailangan.
AVPlayerLayer — ay isang Core Animation layer, nagmamana sa CALayer, na nagbibigay ng video rendering sa screen. Hindi tulad ng UIView, ang AVPlayerLayer ay direktang gumagana sa GPU sa pamamagitan ng Metal o OpenGL, na tinitiyak ang minimal na frame output latency. Ang pag-unawa sa gawain ng AVPlayerLayer ay kinakailangan para sa pag-implement ng custom playback interfaces.
Ang property na videoGravity ay tumutukoy kung paano magkasya ang video sa mga hangganan ng layer. AVLayerVideoGravity.resizeAspect (pagpapanatili ng aspect ratio na may black bars) — default value para sa AVPlayerViewController. Ang resizeAspectFill (pagpuno ng buong screen na may paggupit) ay ginagamit para sa full screen mode. Ang resize (pag-distort ng aspect ratio sa laki ng layer) ay bihirang ginagamit, pangunahin para sa analytical applications.
AVPlayerLayer ay nagre-render ng video sa real-time, ngunit lahat ng operations sa player (start, pause, seek) ay dapat gawin sa main thread. Ang key values para sa observation — timeControlStatus, rate, status at error — ay sinusubaybayan sa pamamagitan ng KVO (Key-Value Observing) o modernong async/await API, na ipinakilala sa iOS 16 sa pamamagitan ng AVPlayer methods na may Swift Concurrency support.
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
}
}
AVPlayer ay sumusuporta sa built-in subtitles sa mga format na VTT, CEA-608 at ITT (iTunes Timed Text). Ang pagpili ng audio track at subtitles ay ginagawa sa pamamagitan ng AVMediaSelectionGroup at AVMediaSelectionOption. Ang user subtitle settings (font, laki, kulay) ay binabasa mula sa system Accessibility settings at awtomatikong inilalapat sa AVPlayerLayer, kung hindi explicitly nakasaad sa code.
Para sa production applications, ang basic integration ng AVPlayer ay madalas nangangailangan ng karagdagang configuration: caching ng HLS segments, pagtatrabaho sa FairPlay DRM, integrasyon sa “Now Playing” system at implementasyon ng custom bitrate selection algorithms.
AVAssetResourceLoader — ang tanging paraan upang maharang ang pag-load ng HLS segments at mag-implement ng caching. Ang AVAssetResourceLoaderDelegate ay tumatanggap ng mga request para sa pag-load ng keys at segments, na nagpapahintulot na i-save ang mga ito nang lokal at ibalik mula sa cache sa paulit-ulit na request. Ito ay lalong kapaki-pakinabang para sa mga app na nagtatrabaho sa hindi stable na network conditions.
let asset = AVURLAsset(url: hlsURL)
asset.resourceLoader.setDelegate(
resourceLoaderDelegate,
queue: DispatchQueue(label: "com.app.resourceloader")
)
let playerItem = AVPlayerItem(asset: asset)
FairPlay Streaming (FPS) — Apple standard para sa proteksyon ng HLS content. Para sa FPS integration, kailangan mag-implement ng AVContentKeySessionDelegate protocol na humahawak ng mga request para sa pagkuha ng decryption keys. Ang proseso ay kinabibilangan ng: pagkuha ng SPC (Server Playback Context) mula sa player, pagpapadala sa license server, pagtanggap ng CKC (Content Key Context) at pagpapadala pabalik sa AVContentKeySession.
class DRMDelegate: NSObject, AVContentKeySessionDelegate {
func contentKeySession(
_ session: AVContentKeySession,
didProvide keyRequest: AVContentKeyRequest
) {
// 1. Kunin ang SPC mula sa keyRequest
// 2. Ipadala ang SPC sa license server
// 3. Kunin ang CKC at ipasa sa keyRequest.processContentKeyResponse
}
}
Para sa pagpapakita ng impormasyon tungkol sa kasalukuyang playback sa Lock Screen, Control Center at Apple Watch, ginagamit ang MPNowPlayingInfoCenter mula sa MediaPlayer.framework. Hindi awtomatikong ina-update ng AVPlayer ang Now Playing — ang developer ay dapat manual na mag-set ng metadata (title, artist, cover, progress) kapag nagbago ang playback status. Para sa pag-update ng progress, ginagamit ang regular na timer o observe(\.timeControlStatus).
Remote Command Center — isa pang system service na nagpapahintulot na kontrolin ang playback mula sa naka-lock na screen, AirPods at CarPlay. Ang MPRemoteCommandCenter ay nagre-register ng mga handler para sa commands na play, pause, nextTrack, previousTrack, changePlaybackPosition at skipForward/skipBackward. Hindi awtomatikong pinoproseso ng AVPlayer ang mga command na ito — dapat silang i-link ng developer sa mga tawag na player.play(), player.pause() at player.seek().
Mga Madalas Itanong
AVPlayer — universal player para sa audio at video na may support para sa streaming, HLS, DRM at synchronization sa system controls. AVAudioPlayer — simplified audio player para sa pag-play ng lokal na audio files nang walang support para sa streaming at hardware video acceleration. Para sa video at HLS gamitin ang AVPlayer, para sa simpleng audio — AVAudioPlayer.
Hindi, hindi sinusuportahan ng AVPlayer ang direktang pag-load ng YouTube content, dahil ang YouTube ay gumagamit ng sarili nitong player na nakabatay sa DASH at proprietary formats. Para sa YouTube integration sa iOS application, gamitin ang YouTube IFrame Player API sa pamamagitan ng WKWebView o ang official library na youtube-ios-player-helper.
Para sa background audio, idagdag ang Audio, AirPlay and Picture in Picture sa Background Modes ng iyong Xcode project. I-configure ang AVAudioSession na may category na .playback: try AVAudioSession.sharedInstance().setCategory(.playback). Ang AVPlayer ay magpapatuloy sa playback sa background, at ang Lock Screen at Control Center ay magpapakita ng controls sa pamamagitan ng MPNowPlayingInfoCenter.
Ang mga serbisyong ito ay gumagamit ng DRM protection at sariling player solutions. Ang AVPlayer ay maaari lamang mag-playback ng content sa pamamagitan ng direktang link sa media file o HLS playlist. Ang video mula sa YouTube at katulad na platforms ay nakabalot sa iframe o JavaScript player na hindi compatible sa AVPlayer. Gamitin ang kanilang official SDK o WebView para sa pagpapakita.
Para sa Low-Latency HLS, i-configure ang AVPlayerItem na may preferredForwardBufferDuration = 2.0 (segundo) at awtomatikong pamahalaan ang pause kapag nahuhuli sa live boundary: gamitin ang player.currentItem?.configuredTimeOffsetFromLive at player.currentItem?.canPlayReverse. Inirerekomenda ng Apple ang LL-HLS na may latency na 2-4 segundo na may tamang configuration sa server at client.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din