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