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 के साथ संगत है, जो एकल फ़ाइलों और प्लेलिस्ट दोनों को चलाने की अनुमति देता है। स्थानीय स्टोरेज से URL, 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें