AVPlayer और MPMoviePlayerController अंतर [बंद]


87

मैं एक iPhone एप्लिकेशन विकसित कर रहा हूं जिसे वीडियो चलाने की आवश्यकता है। अब तक, मुझे पता चला कि इसे प्राप्त करने के लिए कम से कम दो एपीआई हैं; AVPlayerऔर MPMoviePlayerController

मुख्य अंतर क्या हैं?


4
यह सुनिश्चित करने के लिए कि यह राय आधारित उत्तर उत्पन्न नहीं कर रहा है, इस प्रश्न को फिर से बनाने की कोशिश की।
तक

जवाबों:


173

IOS9 के रूप में ध्यान दें , Apple ने MPMoviePlayerController को हटा दिया है:

MPMoviePlayerController वर्ग iOS 9 में औपचारिक रूप से पदावनत है (MPMoviePlayerViewController वर्ग भी औपचारिक रूप से पदावनत है।) iOS 9 में और बाद में वीडियो सामग्री खेलने के लिए, AVKit ढांचे या AVKit ढांचे से AVPictureInPictureController या AVPlayerViewController वर्ग का उपयोग करें।

MPMoviePlayerController संदर्भ से कॉपी किया गया ।

AVPlayer

AVPlayerआपको बहुत अधिक लचीलापन देता है लेकिन बहुत खराब रूप से प्रलेखित है। इस API का उपयोग करने से आप अपना खुद का UI बना सकते हैं। AVFoundation(फ्रेमवर्क जो आपको लाता है AVPlayer) आम तौर पर उपयोगकर्ता (कोडर) पर थोड़ा कठिन होता है क्योंकि यह आपको कुंजी-मूल्य का उपयोग करने के लिए जाँच करने वाले राज्यों के लिए बहुत कुछ करने के लिए मजबूर करता है। KVO की अवधारणा महान है, मुझे गलत मत समझिए - फिर भी, अनुभवहीन डेवलपर्स के लिए यह सीखना दर्दनाक हो सकता है। Apple कभी-कभी इस जानकारी को छोड़ देता है कि कौन से गुण वास्तव में KVO के अनुरूप हैं और यह आपको कुछ प्रयोग करने के लिए मजबूर करेगा।

उदाहरण के लिए AVPlayerओवर का एक बड़ा फायदा MPMoviePlayerControllerइसका विस्तारित संस्करण होगा, AVQueuePlayerक्योंकि यह कई मूवी स्रोतों के गैपलेस प्लेबैक करने में सक्षम है। एक और लाभ निश्चित रूप से सुविधा संपन्न AVFoundationफ्रेमवर्क है जो आपको ऑन-द-फ्लाई मूवी कम्पोज़िशन / एन्कोडिंग / कन्वर्सेशन जैसी चीजें करने की अनुमति देता है।

फिर भी एक और बड़ा फायदा AVPlayerयह है कि आप वास्तव में बिना किसी समस्या के कई वीडियो स्रोत समवर्ती (जैसे अगल-बगल) खेल सकते हैं।

MPMoviePlayerController

MPMoviePlayerControllerउपयोग करने में आसान है और अधिकांश आवश्यकताओं को कवर करता है। इस API का उपयोग करने से आपको एक अच्छा दिखने वाला और आमतौर पर समझा जाने वाला UI मिलेगा। यूआई को हालांकि अक्षम किया जा सकता है और एक कस्टम के साथ बदल दिया जा सकता है।

स्थिति में बदलाव के लिए, नियमित ऐप की जरूरत की हर चीज को कवर करने के लिए कुछ MPMoviePlayerControllerका उपयोग करता है NSNotifications

हुड के तहत, MPMoviePlayerControllerशीर्ष पर बनाता है AVPlayer- लेकिन यह वास्तव में उपयोगकर्ता के लिए पूरी तरह से पारदर्शी होता है - उपयोग करते समय आपके पास उस परत तक कोई पहुंच नहीं होती है MPMoviePlayerController

MPMoviePlayerControllerAVPlayerएक एकल उदाहरण के रूप में अंडरलेइंग का उपयोग करता है , इसलिए MPMoviePlayerControllerसमवर्ती वीडियो चलाने के कई उदाहरणों का उपयोग करना संभव नहीं है ।

दूसरी ओर, जैसे ही आप MPMoviePlayerControllerअपनी स्वयं की विशेषताओं के साथ कार्यक्षमता बढ़ाने की कोशिश कर रहे हैं , कोड जल्दी से गंदा हो जाता है - जैसे कि आप संभवतः उचित तारों का पता लगाने जैसी चीजों को कवर करने के लिए कई टाइमर का उपयोग करना शुरू कर देंगे (वास्तव में, यह सुविधा शामिल है) iOS5 के इस वर्ग के संस्करण में), कस्टम यूआई अपडेट ... या आप एक से अधिक राज्य गुण रखने की कोशिश कर सकते हैं, जो खिलाड़ी को अभी भी प्री-बफरिंग करते हुए ग्रेसफुल एब्रोशन जैसी चीजों को कवर करने की कोशिश कर रहे हैं।


व्यक्तिगत सिफारिश

मैंने दोनों का उपयोग किया है और मैं दोनों का उपयोग करना जारी रखूंगा, ऐप की जरूरतों के आधार पर मुझे निर्माण करने की खुशी है। अधिकांश (सरल) परियोजनाओं के लिए, मैं उपयोग MPMoviePlayerControllerकरने की सलाह दूंगा AVPlayerक्योंकि यह उपयोग करने के लिए बहुत सरल है और कोड की कुछ ही पंक्तियों के साथ, आपको एक पूर्ण मीडिया प्लेयर मिलता है। और अगर मीडिया प्लेबैक पर आपकी मांग और भी सरल है, तो एक नज़र डालें MPMoviePlayerViewController(ध्यान दें कि व्यू-पार्ट)।


2
AVPlayer स्वचालित रूप से आपको लेयर एनिमेशन का उपयोग करने देता है। यदि आप पृष्ठभूमि में कोर एनिमेशन चलाना चाहते हैं, तो एक MPMoviePlayerController का उपयोग न करें, हालांकि इसमें उन्हें सक्षम करने के लिए एक सेटिंग हो सकती है, बस इस बात से अवगत रहें कि यदि आप CALayer सामान का उपयोग कर रहे हैं
Stephen J

3
नहीं। उत्तर सही है। MPMoviePlayerController UI को अक्षम किया जा सकता है और एक कस्टम के साथ बदल दिया जा सकता है।
डेव बैटन

1
@Besi नहीं, लिखित रूप में पूरी तरह से सही है - यह निश्चित रूप से अक्षम किया जा सकता है (MPMovieControlStyleNone का उपयोग करके) और इसलिए इसे प्रतिस्थापित किया जाता है क्योंकि MPMoviePlayer.ontroller के दृश्य के सिबलिंग के रूप में या सीधे सीधे अपने स्वयं के दृश्य को जोड़ने से कुछ भी नहीं रोक रहा है backgroundView
तक

8
IOS 9 के रूप में MPMoviePlayerController पदावनत है और इसलिए आपको भविष्य की परियोजनाओं के लिए AVPlayer का उपयोग करना चाहिए
lewis

1
यह सुपर मूल्यवान जानकारी है @ lewis42 - इसे मेरी प्राचीन पोस्टिंग में जोड़ देगा :)
तक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.