AVPlayerViewController Apple کے ماحولیاتی نظام میں ایک بلٹ ان ویڈیو پلیئر کنٹرولر ہے، جو iOS اور tvOS پر میڈیا مواد چلانے کے لیے ڈیزائن کیا گیا ہے۔ یہ کسٹم UI لکھنے کی ضرورت کے بغیر مکمل اسکرین انٹرفیس، کنٹرولز، سب ٹائٹل سپورٹ اور AirPlay فراہم کرتا ہے۔ Apple Developer دستاویزات، 2026 کے مطابق، AVPlayerViewController کوڈ کی چند سطروں میں ضم ہو جاتا ہے اور HLS, MP4 اور زیادہ تر میڈیا فارمیٹس کو سپورٹ کرتا ہے۔
اہم نکات
AVPlayerViewController AVKit فریم ورک کا ایک جزو ہے جو Apple ایپلیکیشنز میں ویڈیو چلانے کے لیے تیار انٹرفیس فراہم کرتا ہے۔ یہ ڈویلپر کو شروع سے کسٹم پلیئر بنانے کی ضرورت سے نجات دلاتا ہے، معیاری کنٹرولز پیش کرتا ہے: پلے/پاز، سکربرنگ، والیوم ایڈجسٹمنٹ اور مکمل اسکرین موڈ۔
کم سطح کے AVPlayerLayer کے برعکس، جس کے لیے دستی UI تعمیر کی ضرورت ہوتی ہے، AVPlayerViewController پلیئر کی زندگی کے دورانیے کا مکمل انتظام کرتا ہے۔ کنٹرولر خود بخود اسکرین کی گردش کو ہینڈل کرتا ہے، نوچ والے iPhone پر محفوظ علاقے کے مطابق ڈھلتا ہے اور iPad پر ملٹی ٹاسکنگ کو سپورٹ کرتا ہے۔
Apple دستاویزات (2026) کے مطابق، AVPlayerViewController AVPlayer اور AVQueuePlayer کے ساتھ مطابقت رکھتا ہے، جو ایک فائل اور پلے لسٹ دونوں کو چلانے کی اجازت دیتا ہے۔ مقامی اسٹوریج سے URLs, HLS نیٹ ورک اسٹریمز اور خفیہ کردہ FairPlay مواد سپورٹ کیا جاتا ہے۔
یہ جزو iOS 8 میں AVKit کے ساتھ فرسودہ MPMoviePlayerController کے متبادل کے طور پر ظاہر ہوا۔ iOS 11 میں Picture in Picture اور سب ٹائٹل ڈسپلے کے لیے سپورٹ شامل کیا گیا۔ iOS 14 میں، کنٹرولر کو AVPlayerViewControllerDelegate کے ذریعے ایک حسب ضرورت ٹرانسپورٹ بار ملا۔ iOS 16 سے شروع کرتے ہوئے، پلیئر کو دوبارہ بنائے بغیر متحرک میڈیا فائل کی تبدیلی کے لیے سپورٹ متعارف کرایا گیا۔
جدید AVPlayerViewController ProMotion ڈسپلے کے لیے بہتر بنایا گیا ہے - ویڈیو فریم ریٹ خود بخود اسکرین ریفریش ریٹ کے ساتھ مطابقت پذیر ہو جاتا ہے۔ tvOS پر، جزو Siri Remote فوکس انٹرفیس کے مطابق ڈھلتا ہے، اور macOS پر QuickTime Player ونڈو موڈ کے مطابق ڈھلتا ہے۔
کنٹرولر کے مرکز میں AVPlayer اور AVPlayerItem کی جوڑی ہے۔ AVPlayer پلے بیک آبجیکٹ ہے جو ٹائم لائن، رفتار اور حالت کا انتظام کرتا ہے۔ AVPlayerItem ایک مخصوص میڈیا فائل کے گرد ایک ریپر ہے جس میں میٹا ڈیٹا، ٹریکس اور لوڈنگ کی معلومات ہوتی ہیں۔
ابتدائی ہونے پر، AVPlayerViewController AVPlayer کا حوالہ وصول کرتا ہے اور خود بخود ویڈیو ڈسپلے کرنے کے لیے AVPlayerLayer بناتا ہے۔ کنٹرولر readyToPlay، لوڈنگ کی خرابیوں اور پلے بیک مکمل ہونے جیسی حالت کی تبدیلیوں کے بارے میں AVPlayer KVO اطلاعات کو سبسکرائب کرتا ہے۔
کنٹرولز (ٹرانسپورٹ بار) ٹیپ کرنے پر ظاہر ہوتے ہیں۔ iOS 15+ میں، وہ AVPlayerViewControllerCustomizationDelegate کے ذریعے حسب ضرورت کو سپورٹ کرتے ہیں، جس سے معیاری بٹن چھپائے یا تبدیل کیے جا سکتے ہیں۔
کنٹرولر بنانے اور AVPlayer تفویض کرنے کے بعد، viewDidLoad طریقہ کار کہا جاتا ہے، جو ویڈیو اسٹریم تیار کرنا شروع کرتا ہے۔ جب AVPlayerItem AVPlayerItemStatusReadyToPlay حالت میں منتقل ہوتا ہے، پلیئر فریم ڈسپلے کرنے کے لیے تیار ہوتا ہے۔ جب play() طریقہ کار کہا جاتا ہے، Video Toolbox کے ذریعے ویڈیو اسٹریم ڈیکوڈنگ شروع ہوتی ہے۔
اسکرین چھوڑنے پر، کنٹرولر خود بخود پلے بیک روک دیتا ہے اور ڈیکوڈر وسائل کو آزاد کرتا ہے۔ iOS 13+ پر، جب ایپ چھوٹی ہوتی ہے تو پلے بیک برقرار رکھنے کے لیے، بیک گراؤنڈ موڈز اور آڈیو سیشن کنفیگر کرنا ضروری ہے۔ WWDC 2024 کے مطابق، iOS میڈیا سینٹر کے ساتھ مطابقت پذیری کے لیے AVPlayerPlaybackCoordinator استعمال کرنے کی سفارش کی جاتی ہے۔
یہ جزو باکس سے باہر خصوصیات کا ایک بھرپور سیٹ فراہم کرتا ہے، جو اسے زیادہ تر پروجیکٹس کے لیے پرکشش بناتا ہے۔ ذیل میں اہم صلاحیتیں ہیں جن کے لیے اضافی کوڈ کی ضرورت نہیں ہے۔
ٹرانسپورٹ بار انٹرفیس کا نچلا حصہ ہے جس میں مرکزی کنٹرول بٹن ہوتے ہیں۔ پہلے سے طے شدہ طور پر، بار صارف کی غیرفعالیت کے 3 سیکنڈ بعد چھپ جاتا ہے اور ٹیپ کرنے پر ظاہر ہوتا ہے۔ iOS 16+ میں، ڈیلیگیٹ کو انفرادی عناصر کی مرئیت کو کنٹرول کرنے کے لیے استعمال کیا جا سکتا ہے۔
ڈیبگ موڈ میں، AVPlayerViewController.requiresLinearPlayback پراپرٹی استعمال کرکے ٹرانسپورٹ بار کو زبردستی دکھایا جا سکتا ہے، جو ویڈیو کو روکے جانے سے بھی روکتا ہے۔ یہ اشتہاری وقفوں اور تعلیمی مواد کے لیے مفید ہے۔
کنٹرولر کا بنیادی انضمام کوڈ کی 10 سے زیادہ سطریں نہیں لیتا۔ پہلے، میڈیا فائل URL کے ساتھ ایک AVPlayer انسٹنس بنائیں، پھر اسے AVPlayerViewController میں پاس کریں اور کنٹرولر کو اسکرین پر ڈسپلے کریں۔
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()
}
present کال کرنے کے بعد، کنٹرولر مکمل اسکرین ڈسپلے ہوتا ہے۔ ویڈیو نیٹ ورک سے لوڈ ہونا شروع ہوتی ہے، اور ایک بار بفر readyToPlay حد تک پہنچ جاتا ہے، play() کال کرنے کے بعد پلے بیک خود بخود شروع ہوتا ہے۔
let asset = AVAsset(url: videoURL)
let item = AVPlayerItem(asset: asset)
let metadata = AVMutableMetadataItem()
metadata.key = AVMetadataKey.commonKeyTitle
metadata.value = "میری ویڈیو"
item.addMetadata(metadata)
let player = AVPlayer(playerItem: item)
let playerVC = AVPlayerViewController()
playerVC.player = player
AVPlayerItem استعمال کرنے سے آپ کو میٹا ڈیٹا، ٹائم کوڈز، آڈیو ٹریک سلیکشن اور سب ٹائٹلز پر کنٹرول ملتا ہے۔ AVPlayerItem کے ذریعے، آپ status پراپرٹی پر KVO استعمال کرکے لوڈنگ پیش رفت، بفرنگ اور نیٹ ورک کی خرابیوں کی نگرانی بھی کر سکتے ہیں۔
iOS 11 سے شروع کرتے ہوئے، ڈویلپر AVPlayerViewControllerDelegate پروٹوکول کے ذریعے ٹرانسپورٹ بار کو اپنی مرضی کے مطابق بنا سکتے ہیں۔ playerViewController(_:willBeginFullScreenPresentationWithAnimationCoordinator:) طریقہ کار مکمل اسکرین موڈ میں داخل ہونے سے پہلے کہا جاتا ہے اور UI تیار کرنے کی اجازت دیتا ہے۔
انفرادی بٹن چھپانے کے لیے، AVPlayerViewController.showsPlaybackControls پراپرٹی استعمال کریں۔ اگر false پر سیٹ کیا جائے تو ٹرانسپورٹ بار مکمل طور پر غائب ہو جاتا ہے، صرف ویڈیو اسٹریم رہ جاتا ہے۔ کسٹم اوورلے عناصر کے لیے مفید۔
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
) {
// اوورلے بٹن شامل کریں
}
func playerViewController(
_ playerViewController: AVPlayerViewController,
didUpdate legibleMediaSelection: AVMediaSelectionGroup
) {
print("سب ٹائٹل کی نئی زبان منتخب")
}
}
ڈیلیگیٹ سب ٹائٹل تبدیلی کے واقعات، مکمل اسکرین موڈ میں داخل ہونے اور باہر نکلنے، نیز Picture in Picture شروع اور ختم کرنے کو روکنے کی اجازت دیتا ہے۔ WWDC 2024 میں، Apple نے تجزیہ کے لیے ڈیلیگیٹ استعمال کرنے کی سفارش کی - ہر منتقلی کو 100 ms کے اندر لاگ کریں۔
AVPlayerViewController خود بخود تمام دستیاب سب ٹائٹلز اور آڈیو ٹریکس ڈسپلے کرتا ہے اگر وہ میڈیا فائل میں ایمبیڈڈ ہوں یا HLS مینی فیسٹ میں مخصوص ہوں۔ صارفین ٹرانسپورٹ بار میں سب ٹائٹل آئیکن پر ٹیپ کرنے پر ظاہر ہونے والے مینو کے ذریعے انہیں تبدیل کر سکتے ہیں۔
HLS اسٹریمز کے لیے، M3U8 مینی فیسٹ میں دستیاب زبان کے متغیرات کی فہرست ہوتی ہے۔ AVPlayer متعلقہ WebVTT سب ٹائٹل سیگمنٹس لوڈ کرتا ہے اور انہیں رینڈرنگ کے لیے AVPlayerLayer میں پاس کرتا ہے۔ iOS 16+ نے AVTextStyleRule کے ذریعے سب ٹائٹل اسٹائلنگ سپورٹ متعارف کرایا۔
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)
}
}
}
selectAudioTrack طریقہ audible گروپ کے آڈیو آپشنز میں سے اس متغیر کو تلاش کرتا ہے جس کا extendedLanguageTag مطلوبہ زبان کے کوڈ سے مماثل ہو۔ یہ کثیر لسانی مواد والی ایپس میں "اصل آڈیو" فیچر لاگو کرنے کی اجازت دیتا ہے۔
Picture in Picture (PiP) موڈ دوسری ایپس کے اوپر فلوٹنگ ونڈو میں ویڈیو ڈسپلے کرنے کی اجازت دیتا ہے۔ iPad پر، یہ فیچر iOS 9 سے دستیاب ہے، iPhone پر iOS 14 سے۔ AVPlayerViewController UIBackgroundModes کو سبسکرائب کرنے پر خود بخود ٹرانسپورٹ بار میں PiP بٹن شامل کرتا ہے۔
PiP فعال کرنے کے لیے، Info.plist میں audio اور airplay اقدار کے ساتھ UIBackgroundModes کلید شامل کریں۔ اس کے بعد، کنٹرولر میں ایک PiP بٹن ظاہر ہوتا ہے، جسے ٹیپ کرنے پر ویڈیو 192x108 پوائنٹس کی فلوٹنگ ونڈو میں سمٹ جاتا ہے۔
PiP واقعات ڈیلیگیٹ کے ذریعے ہینڈل کیے جاتے ہیں: playerViewController(_:willStartPictureInPictureFromFullScreen:) اور playerViewController(_:didStopPictureInPicture:)۔ Apple HIG کے مطابق، مواد کی پڑھنے کی اہلیت برقرار رکھنے کے لیے PiP ونڈو کا کم از کم سائز 120x68 پوائنٹس ہونا چاہیے۔
اکثر پوچھے گئے سوالات
نہیں، YouTube ویڈیوز کے لیے ویب ویو WKWebView یا YouTube iOS Helper لائبریری استعمال کرنے کی ضرورت ہے، کیونکہ YouTube اپنا DRM سسٹم استعمال کرتا ہے۔ AVPlayerViewController URL کے ذریعے براہ راست میڈیا اسٹریمز کے لیے ڈیزائن کیا گیا ہے۔
showsPlaybackControls پراپرٹی کو false پر سیٹ کریں۔ اس کے بعد، اسکرین خالی رہتی ہے - صرف ویڈیو اسٹریم۔ کسٹم بٹن واپس لانے کے لیے، کنٹرولر کے اوپر addSubview کے ذریعے ایک اوورلے شامل کریں۔
ہاں، کنٹرولر مکمل طور پر HLS Live کو سپورٹ کرتا ہے۔ ٹرانسپورٹ بار پیش رفت سلائیڈر کے بجائے لائیو اشارہ دکھاتا ہے۔ تاخیر HLS کنفیگریشن پر منحصر ہے - کم تاخیر کی ترتیبات کے ساتھ کم از کم 6 سیکنڈ۔
AVPlayerItem.status پراپرٹی پر KVO سبسکرائب کریں۔ خرابی پر، اسٹیٹس .failed میں بدل جاتا ہے۔ AVPlayerItem کی error پراپرٹی کے ذریعے تفصیلات حاصل کریں اور صارف کو مسئلہ کی وضاحت کرتے ہوئے الرٹ دکھائیں - اکثر یہ نیٹ ورک کا مسئلہ یا غلط URL ہوتا ہے۔
ہاں، RAM سے ڈیٹا فراہم کرنے کے لیے کسٹم AVAssetResourceLoader کے ساتھ AVAsset استعمال کریں۔ AVAssetResourceLoaderDelegate کو لاگو کریں اور ڈسک سے پڑھنے کے بجائے بفر سے بائٹس واپس کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں