AVPlayer Apple کا ایک میڈیا پلیئر فریم ورک ہے، جو AVFoundation کا حصہ ہے، اور iOS، macOS، tvOS اور visionOS پر آڈیو اور ویڈیو پلے بیک فراہم کرتا ہے۔ AVPlayer مقامی MP4 فائلوں سے لے کر انکولی HLS سٹریمز تک — Apple Silicon چپس پر ہارڈویئر سے تیز رفتار ڈی کوڈنگ کے ساتھ ایک یونیفائیڈ API کے ذریعے فارمیٹس کی ایک وسیع رینج کو سپورٹ کرتا ہے۔ Apple WWDC (2024) کے مطابق، AVPlayer میڈیا کے ساتھ کام کرنے والی 90% iOS ایپلیکیشنز میں استعمال ہوتا ہے، بشمول Apple TV، Music اور Photos۔
اہم نکات
AVPlayer AVFoundation فریم ورک کا مرکزی جزو ہے، جو تمام Apple پلیٹ فارمز پر ملٹی میڈیا پلے بیک کا ذمہ دار ہے۔ iOS 4.0 (2010) میں متروک MPMoviePlayerController کے متبادل کے طور پر متعارف کرایا گیا، AVPlayer ڈی کوڈنگ پیرامیٹرز کی باریک ٹیوننگ، آڈیو-ویڈیو سنکرونائزیشن، اور AirPlay اور Picture in Picture جیسی سسٹم سروسز کے ساتھ انضمام کے ساتھ پلے بیک پر نچلی سطح کا کنٹرول فراہم کرتا ہے۔
تیسرے فریق کے پلیئرز کے برعکس، AVPlayer Apple Silicon چپس پر ہارڈویئر ایکسلریشن سے فائدہ اٹھاتا ہے۔ ویڈیو ڈی کوڈنگ وقف M-سیریز میڈیا انجن (Media Engine) کا استعمال کرتے ہوئے VideoToolbox کے ذریعے کی جاتی ہے، جو کم سے کم بجلی کی کھپت کے ساتھ 8K HDR پلے بیک کو قابل بناتی ہے۔ HEVC (H.265) اور ProRes کے لیے، ڈی کوڈنگ CPU پر بوجھ ڈالے بغیر خصوصی چپ بلاکس پر ہوتی ہے۔
AVPlayer Apple ایکو سسٹم کے ساتھ مضبوطی سے مربوط ہے: آلات کے درمیان پلے بیک منتقل کرنے کے لیے Handoff سپورٹ، Apple TV پر سٹریم کرنے کے لیے AirPlay 2، متحرک ہیڈ ٹریکنگ کے ساتھ مقامی آڈیو، اور MPNowPlayingInfoCenter کے ذریعے سسٹم کنٹرول عناصر کے ساتھ سنکرونائزیشن۔ یہ انضمام AVPlayer کو Apple پلیٹ فارمز پر میڈیا کے ساتھ کام کرنے والی تمام ایپلیکیشنز کے لیے ڈی فیکٹو معیار بناتے ہیں۔
AVFoundation فریم ورک پلے بیک کے لیے تین سطحی درجہ بندی فراہم کرتا ہے: AVAsset (میٹا ڈیٹا اور مواد کی معلومات)، AVPlayerItem (کسی مخصوص مواد کی مثال کی حالت اور انتظام)، اور AVPlayer (پلے بیک کنٹرول)۔ یہ آرکیٹیکچر میٹا ڈیٹا لوڈنگ، پلے بیک کی تیاری، اور پلے بیک کے عمل کو الگ کرتا ہے — جو متعدد بٹریٹ آپشنز والی HLS سٹریمز کے لیے خاص طور پر اہم ہے۔
AVAsset ایک میڈیا مواد کے ماڈل — ایک فائل یا سٹریم — کی نمائندگی کرتا ہے۔ AVAsset خود سے چلانے کے قابل نہیں ہے؛ اس میں ٹریک (AVAssetTrack)، میٹا ڈیٹا (commonMetadata)، دورانیے کی معلومات اور دیگر خصوصیات ہوتی ہیں۔ AVAsset سے AVPlayerItem بنایا جاتا ہے، جسے پھر پلے بیک کے لیے AVPlayer کو بھیجا جا سکتا ہے۔
AVPlayer زیادہ تر پلے بیک منظرناموں کو کور کرنے والی صلاحیتوں کا ایک سیٹ فراہم کرتا ہے — سادہ فائل پلے بیک سے لے کر DRM کے ساتھ پیچیدہ لائیو براڈکاسٹ تک۔ آئیے استعمال کی مثالوں کے ساتھ اہم خصوصیات کو دریافت کریں۔
| خصوصیت | تفصیل | پلیٹ فارمز |
|---|---|---|
| مقامی فائلیں | MP4، MOV، M4V، AVI، MKV (ایکسٹینشن کے ذریعے) | iOS، macOS، tvOS |
| HLS | انکولی ABR کے ساتھ HTTP Live Streaming | تمام Apple پلیٹ فارمز |
| FairPlay DRM | سٹریمنگ لائسنس کے ساتھ محفوظ HLS مواد | iOS، tvOS، macOS |
| Picture in Picture | دیگر ایپس کے اوپر تیرتی ویڈیو ونڈو | iPad، iPhone (iOS 14+)، Mac |
| AirPlay 2 | Apple TV اور اسپیکرز پر وائرلیس سٹریمنگ | تمام پلیٹ فارمز |
| مقامی آڈیو | Dolby Atmos اور متحرک ہیڈ ٹریکنگ | iOS 15+، macOS 13+ |
| HDR | Dolby Vision، HDR10، HLG ڈسپلے سپورٹ کے ساتھ | iOS 11+، macOS 10.13+ |
AVPlayer کو اضافی لائبریریوں کی ضرورت کے بغیر مقامی HLS سپورٹ حاصل ہے۔ HLS سٹریم چلاتے وقت، AVPlayer Apple پلیٹ فارمز کے لیے موزوں ایک بلٹ ان ABR الگورتھم کا استعمال کرتے ہوئے خود بخود انکولی بٹریٹ سوئچنگ کو ہینڈل کرتا ہے۔ الگورتھم صرف نیٹ ورک بینڈوڈتھ ہی نہیں بلکہ ڈیوائس کی تھرمل حالت کو بھی مدنظر رکھتا ہے — زیادہ گرم ہونے پر، AVPlayer CPU لوڈ کم کرنے کے لیے بٹریٹ کم کر سکتا ہے۔
FairPlay Streaming کے ساتھ HLS سٹریمز کے لیے، AVPlayer خود بخود AVContentKeySession ڈیلیگیٹ کے ذریعے لائسنس کے حصول اور تجدید کو ہینڈل کرتا ہے۔ ڈیولپر کو AVContentKeySessionDelegate پروٹوکول لاگو کرنا ہوتا ہے، جسے پلیئر اس وقت کال کرتا ہے جب ڈکرپشن کلید حاصل کرنے یا تجدید کرنے کی ضرورت ہوتی ہے۔ Apple پلیٹ فارمز پر HLS مواد کی حفاظت کا یہی واحد طریقہ ہے، کیونکہ Widevine iOS پر سپورٹ نہیں ہے۔
PiP ایک موڈ ہے جو صارفین کو ایپس کے درمیان سوئچ کرتے وقت تیرتی ونڈو میں ویڈیو دیکھتے رہنے کی اجازت دیتا ہے۔ iPad اور iPhone (iOS 14+) پر، AVPlayer اس موڈ کو فعال کرنے کے لیے AVPictureInPictureController کے ساتھ مربوط ہوتا ہے۔ macOS 15+ پر، PiP بھی دستیاب ہے لیکن سسٹم مینیو یا پلیئر ونڈو میں بٹن کے ذریعے فعال کیا جاتا ہے۔
AVPlayer کو iOS ایپ میں ضم کرنا دو طریقوں سے کیا جا سکتا ہے: اعلیٰ سطحی AVPlayerViewController کے ذریعے (معیاری منظرناموں کے لیے) یا براہ راست AVPlayer + AVPlayerLayer کے ذریعے (مکمل UI حسب ضرورت کے لیے)۔ آئیے Swift میں دونوں طریقوں کو دریافت کریں۔
AVPlayerViewController ایک ریڈی ٹو یوز UI جزو ہے جو بلٹ ان کنٹرولز فراہم کرتا ہے: پلے/پاز، تلاش، والیوم، AirPlay، PiP اور فل سکرین موڈ۔ کم سے کم انضمام کے لیے کوڈ کی صرف چند لائنیں درکار ہیں: AVPlayer مثال بنائیں، اسے AVPlayerViewController کو بھیجیں اور کنٹرولر کو سکرین پر ڈسپلے کریں۔
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()
}
کسٹم UI والی ایپس کے لیے، AVPlayerLayer استعمال کریں — ایک Core Animation پرت جو کسی بھی UIView کے اندر ویڈیو رینڈر کرتی ہے۔ یہ طریقہ انٹرفیس پر مکمل کنٹرول دیتا ہے: آپ کسٹم کنٹرولز، اینیمیشنز شامل کر سکتے ہیں اور ویڈیو کے اوپر اضافی پرتیں لگا سکتے ہیں۔
class VideoPlayerView: UIView {
var player: AVPlayer? {
get { (layer as! AVPlayerLayer).player }
set { (layer as! AVPlayerLayer).player = newValue }
}
override class var layerClass: AnyClass {
AVPlayerLayer.self
}
}
// استعمال:
let playerView = VideoPlayerView(frame: view.bounds)
playerView.player = AVPlayer(url: url)
view.addSubview(playerView)
ایپ کے استحکام کے لیے مناسب پلیئر لائف سائیکل مینجمنٹ ضروری ہے۔ AVPlayer کو سکرین ظاہر ہونے پر بنایا جانا چاہیے اور بند ہونے پر ریلیز کیا جانا چاہیے۔ جب ایپ بیک گراؤنڈ میں جاتی ہے، تو وسائل بچانے اور غیر ضروری بیک گراؤنڈ پلے بیک کے لیے App Review جرمانے سے بچنے کے لیے پلے بیک کو روکنے کی سفارش کی جاتی ہے۔
AVPlayerLayer ایک Core Animation پرت ہے جو CALayer سے وراثت پاتی ہے اور سکرین پر ویڈیو رینڈر کرتی ہے۔ UIView کے برعکس، AVPlayerLayer Metal یا OpenGL کے ذریعے براہ راست GPU کے ساتھ کام کرتی ہے، کم سے کم فریم آؤٹ پٹ لیٹنسی کو یقینی بناتی ہے۔ کسٹم پلے بیک انٹرفیس لاگو کرنے کے لیے AVPlayerLayer کو سمجھنا ضروری ہے۔
videoGravity خاصیت یہ طے کرتی ہے کہ ویڈیو پرت کی حدود میں کیسے فٹ ہوتی ہے۔ AVLayerVideoGravity.resizeAspect (سیاہ باروں کے ساتھ تناسب برقرار رکھنا) AVPlayerViewController کے لیے ڈیفالٹ ہے۔ resizeAspectFill (کراپنگ کے ساتھ پوری سکرین بھرنا) فل سکرین موڈ کے لیے استعمال ہوتا ہے۔ resize (پرت کے سائز میں فٹ ہونے کے لیے تناسب کو بگاڑنا) شاذ و نادر ہی استعمال ہوتا ہے، زیادہ تر تجزیاتی ایپلیکیشنز کے لیے۔
AVPlayerLayer ویڈیو کو ریئل ٹائم میں رینڈر کرتی ہے، لیکن تمام پلیئر آپریشنز (شروع، روکنا، تلاش) مین تھریڈ پر انجام دینے چاہئیں۔ مشاہدے کے لیے کلیدی قدریں — timeControlStatus، rate، status اور error — KVO (Key-Value Observing) یا iOS 16 میں Swift Concurrency سپورٹ کے ساتھ AVPlayer طریقوں کے ذریعے متعارف کردہ جدید async/await API کے ذریعے ٹریک کی جاتی ہیں۔
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 VTT، CEA-608 اور ITT (iTunes Timed Text) فارمیٹس میں ایمبیڈڈ سب ٹائٹلز کو سپورٹ کرتا ہے۔ آڈیو ٹریک اور سب ٹائٹل کا انتخاب AVMediaSelectionGroup اور AVMediaSelectionOption کے ذریعے کیا جاتا ہے۔ صارف کی سب ٹائٹل سیٹنگز (فونٹ، سائز، رنگ) سسٹم ایکسیسبیلٹی سیٹنگز سے پڑھی جاتی ہیں اور کوڈ میں واضح طور پر متعین نہ ہونے پر خود بخود AVPlayerLayer پر لاگو ہوتی ہیں۔
پروڈکشن ایپلیکیشنز کے لیے، بنیادی AVPlayer انضمام میں اکثر اضافی کنفیگریشن کی ضرورت ہوتی ہے: HLS سیگمنٹ کیشنگ، FairPlay DRM انضمام، Now Playing سسٹم انضمام اور کسٹم بٹریٹ سلیکشن الگورتھم۔
AVAssetResourceLoader HLS سیگمنٹ لوڈنگ کو روکنے اور کیشنگ لاگو کرنے کا واحد طریقہ ہے۔ AVAssetResourceLoaderDelegate کیز اور سیگمنٹس کے لیے لوڈنگ کی درخواستیں وصول کرتا ہے، انہیں مقامی طور پر ذخیرہ کرنے اور بعد کی درخواستوں پر کیش سے واپس کرنے کی اجازت دیتا ہے۔ یہ غیر مستحکم نیٹ ورک حالات میں کام کرنے والی ایپلیکیشنز کے لیے خاص طور پر مفید ہے۔
let asset = AVURLAsset(url: hlsURL)
asset.resourceLoader.setDelegate(
resourceLoaderDelegate,
queue: DispatchQueue(label: "com.app.resourceloader")
)
let playerItem = AVPlayerItem(asset: asset)
FairPlay Streaming (FPS) HLS مواد کے تحفظ کے لیے Apple کا معیار ہے۔ FPS کو ضم کرنے کے لیے، آپ کو AVContentKeySessionDelegate پروٹوکول لاگو کرنا ہوگا، جو ڈکرپشن کیز کی درخواستوں کو ہینڈل کرتا ہے۔ اس عمل میں شامل ہیں: پلیئر سے SPC (سرور پلے بیک سیاق) حاصل کرنا، اسے لائسنس سرور پر بھیجنا، CKC (مواد کی کلید کا سیاق) وصول کرنا اور اسے AVContentKeySession کو واپس بھیجنا۔
class DRMDelegate: NSObject, AVContentKeySessionDelegate {
func contentKeySession(
_ session: AVContentKeySession,
didProvide keyRequest: AVContentKeyRequest
) {
// 1. keyRequest سے SPC حاصل کریں
// 2. SPC لائسنس سرور پر بھیجیں
// 3. CKC حاصل کریں اور keyRequest.processContentKeyResponse کو بھیجیں
}
}
لاک سکرین، کنٹرول سینٹر اور Apple Watch پر موجودہ پلے بیک کی معلومات ظاہر کرنے کے لیے، MediaPlayer.framework سے MPNowPlayingInfoCenter استعمال کریں۔ AVPlayer خود بخود Now Playing کو اپ ڈیٹ نہیں کرتا — ڈیولپر کو پلے بیک کی حالت بدلنے پر دستی طور پر میٹا ڈیٹا (عنوان، آرٹسٹ، آرٹ ورک، پیش رفت) سیٹ کرنا ہوتا ہے۔ پیش رفت کی اپ ڈیٹس کے لیے ایک باقاعدہ ٹائمر یا observe(\.timeControlStatus) استعمال کیا جاتا ہے۔
Remote Command Center ایک اور سسٹم سروس ہے جو لاک سکرین، AirPods اور CarPlay سے پلے بیک کو کنٹرول کرنے کی اجازت دیتی ہے۔ MPRemoteCommandCenter play، pause، nextTrack، previousTrack، changePlaybackPosition اور skipForward/skipBackward کمانڈز کے لیے ہینڈلر رجسٹر کرتا ہے۔ AVPlayer ان کمانڈز کو خود بخود ہینڈل نہیں کرتا — ڈیولپر کو انہیں player.play()، player.pause() اور player.seek() کالز سے جوڑنا ہوتا ہے۔
اکثر پوچھے گئے سوالات
AVPlayer سٹریمنگ، HLS، DRM اور سسٹم کنٹرولز کے ساتھ سنکرونائزیشن کے سپورٹ کے ساتھ ایک یونیورسل آڈیو اور ویڈیو پلیئر ہے۔ AVAudioPlayer سٹریمنگ یا ہارڈویئر ویڈیو ایکسلریشن کے بغیر مقامی آڈیو فائل پلے بیک کے لیے ایک سادہ آڈیو پلیئر ہے۔ ویڈیو اور HLS کے لیے، AVPlayer استعمال کریں؛ سادہ آڈیو کے لیے، AVAudioPlayer استعمال کریں۔
نہیں، AVPlayer براہ راست YouTube مواد لوڈنگ کو سپورٹ نہیں کرتا، کیونکہ YouTube DASH اور ملکیتی فارمیٹس پر مبنی اپنا پلیئر استعمال کرتا ہے۔ iOS ایپ میں YouTube کو ضم کرنے کے لیے، WKWebView یا آفیشل youtube-ios-player-helper لائبریری کے ذریعے YouTube IFrame Player API استعمال کریں۔
بیک گراؤنڈ آڈیو کے لیے، اپنے Xcode پروجیکٹ کی بیک گراؤنڈ موڈز میں Audio, AirPlay and Picture in Picture شامل کریں۔ AVAudioSession کو .playback زمرے کے ساتھ کنفیگر کریں: try AVAudioSession.sharedInstance().setCategory(.playback)۔ AVPlayer بیک گراؤنڈ میں چلتا رہے گا، اور لاک سکرین اور کنٹرول سینٹر MPNowPlayingInfoCenter کے ذریعے کنٹرولز ڈسپلے کریں گے۔
یہ خدمات DRM تحفظ اور اپنے پلیئر حل استعمال کرتی ہیں۔ AVPlayer صرف براہ راست میڈیا فائل URL یا HLS پلے لسٹ کے ذریعے مواد چلا سکتا ہے۔ YouTube اور اسی طرح کے پلیٹ فارمز کی ویڈیوز iframe یا JavaScript پلیئرز میں لپٹی ہوتی ہیں جو AVPlayer کے ساتھ مطابقت نہیں رکھتیں۔ ڈسپلے کے لیے ان کے آفیشل SDK یا WebView استعمال کریں۔
کم تاخیر والی HLS کے لیے، AVPlayerItem کو preferredForwardBufferDuration = 2.0 (سیکنڈ) کے ساتھ کنفیگر کریں اور لائیو ایج سے پیچھے رہنے پر خود بخود روکنے کا انتظام کریں: player.currentItem?.configuredTimeOffsetFromLive اور player.currentItem?.canPlayReverse استعمال کریں۔ Apple سرور اور کلائنٹ دونوں پر درست کنفیگریشن کے ساتھ 2-4 سیکنڈ تاخیر کے ساتھ LL-HLS کی سفارش کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں