14

मैं एक आईफोन एप्लिकेशन विकसित कर रहा हूं जिसमें वीडियो प्ले के लिए समर्थन है। मैं वीडियो चलाने के लिए कस्टम नियंत्रण के साथ MPMoviePlayerController का उपयोग कर रहा हूँ। इस उद्देश्य के लिए मैंने MPMovieClayrolStyleNone पर MPMoviePlayerController की नियंत्रण शैली सेट की है।एयरप्ले समर्थन, MPMoviePlayerController और MPVolumeView संबंध

मैं वीडियो चलाने के लिए एयरप्ले सुविधा का समर्थन करना चाहता हूं। दस्तावेज के अनुसार, हमें एयरप्ले फीचर को सक्षम करने के लिए MPMoviePlayerController की 'allowAirPlay' प्रॉपर्टी को YES पर सेट करना होगा। यदि मैं कस्टम नियंत्रण के साथ MPMoviePlayerController का उपयोग कर रहा हूं, तो मैं अपने प्लेयर UI पर एयरप्ले बटन कैसे प्रदर्शित कर सकता हूं?

मैं निम्नलिखित की कोशिश की है:

  1. instantiated MPVolumeView
  2. कोई वॉल्यूम स्लाइडर और अपने कस्टम खिलाड़ी देखें
  3. पर मार्ग बटन
  4. जोड़ा गया MPVolumeView को छिपाने के लिए करने के लिए MPVolumeView की showsRouteButton और showsVolumeSlider प्रॉपर्टी सेट

मैंने MPVolumeView और MPMoviePlayerController का संदर्भ एक-दूसरे को नहीं दिया है। लेकिन, अगर MPMoviePlayerController की 'allowAirPlay' को YES पर सेट किया गया है तो MPVolumeView पर एयरप्ले बटन प्रदर्शित होता है। MPVolumeView और MPMoviePlayerController कैसे संबंधित हैं? कृपया मुझे स्वतंत्र रूप से बनाए गए इन दो वर्गों के बीच संबंध बताएं।

धन्यवाद और सादर, दीपा

+0

इस पर कोई अपडेट? – spd

+0

आप कस्टम नियंत्रण बार के साथ नहीं कर सकते हैं। एकमात्र जगह आप एयरप्ले बटन (ऐप्पल के कोड के साथ छेड़छाड़ किए बिना) दिखा सकते हैं मानक नियंत्रण पट्टी का उपयोग कर। – lostInTransit

+0

उम्मीद है कि यह 5 में एयरप्ले के अपडेट के साथ तय किया गया है।0 –

उत्तर

10

चूंकि MPMoviePlayerController आपको एक समय में एक वीडियो चलाने की अनुमति देता है, तो मीडियाप्लेयर फ्रेमवर्क हमेशा चल रहे वीडियो को जानता है। MPVolumeView MPMoviePlayerController के बारे में जानता है। मेरे पास कोई आधिकारिक दस्तावेज़ नहीं है, लेकिन मुझे लगता है कि यह इस तरह ढांचे में बेक्ड है।

चूंकि शायद बहुत सारे चेक और शेष चल रहे हैं (और वे लगातार यूआई पसंद करते हैं), ऐप्पल केवल आपको इस सुविधा में टैप करने के लिए अपने एयरप्ले बटन/यूआई का उपयोग करने की अनुमति देता है। हालांकि, आप उस बटन डाल सकते हैं जहाँ भी आप चाहते हैं:

airplayButton = [[MPVolumeView alloc] init]; 
airplayButton.frame = CGRectMake(myX, myY, 40, 40); 
[airplayButton setShowsVolumeSlider:NO]; 
[customPlayerControls.view addSubview:airplayButton]; 

मैं सिर्फ चौड़ाई पर अनुमान लगाया, ऊंचाई जा रहा 40,40 और मुझे यकीन है कि यह सही नहीं है, लेकिन एक बार मैं जगह में बटन मिल गया यह नहीं था कोई फर्क नहीं पड़ता।

+0

लेकिन, यह मेरे प्रश्न का उत्तर नहीं देता – spd

+2

आप दो प्रश्न पूछते हैं: > यदि मैं कस्टम नियंत्रण के साथ MPMoviePlayerController का उपयोग कर रहा हूं, तो मैं अपने प्लेयर UI पर एयरप्ले बटन कैसे प्रदर्शित कर सकता हूं? कोड स्निपेट इसका उत्तर देता है। MPVolumeView का एक उदाहरण बनाएं, इसके वॉल्यूम स्लाइडर को छुपाएं, आपको एयरप्ले बटन के साथ छोड़ दिया गया है। अपना फ्रेम सेट करें और इसे दृश्य में जोड़ें। यह आपके नियंत्रण में एक पूरी तरह से काम कर रहे एयरप्ले बटन रखता है। यह केवल तब दिखाई देता है जब श्रेणी में एयरप्ले सक्षम डिवाइस है। [उपस्थिति को बदलने के लिए]: http://stackoverflow.com/questions/5730973/airplay-support-mpmovieplayercontroller-and-mpvolumeview-relation/6988562#6988562 – devdavid

+0

> MPVolumeView और MPMoviePlayerController कैसे संबंधित हैं? वे मीडियाप्लेयर ढांचे का हिस्सा हैं, इसलिए, जब एक एमपीमोवी प्लेयर नियंत्रक फिल्म चला रहा है, तो ढांचा इसके बारे में "जानता है"। चूंकि MPVolumeView ढांचे में है, यह इसके बारे में "जानता है"। यही कारण है कि आपको MPMoviePlayerController के किसी भी संदर्भ को एयरप्ले बटन पर पास करने की आवश्यकता नहीं है - यह पहले से ही जानता है। – devdavid

2
for (UIButton *button in volumeView.subviews) { 
if ([button isKindOfClass:[UIButton class]]) { 
    [button setImage:[UIImage imageNamed:@"custom-route-button.png"] forState:UIControlStateNormal]; 
    [button sizeToFit]; 
}} 

मुझे लगता है कि यह आप में मदद मिलेगी।

+0

इस समाधान में ऐप्पल द्वारा ऐप अस्वीकृति की संभावना है। हालांकि, वर्तमान में यह एकमात्र समाधान उपलब्ध है। +1 – Till

+0

@ टिल: चूंकि यह समाधान किसी भी निजी एपीआई का उपयोग नहीं करता है, इसलिए ऐप्पल इसे अस्वीकार नहीं करेगा। वास्तव में, हम समान चीजें करते हैं (वॉल्यूम स्लाइडर को कस्टमाइज़ करें) और अन्य ऐप्स भी इसे करते हैं। अगर ऐप्पल लेआउट को बदल देता है ताकि बटन प्रत्यक्ष सबव्यूव न हो, तो कोड अब और काम नहीं करेगा, लेकिन यह कुछ हानिकारक नहीं करेगा। – DarkDust

+0

@ गैर-निजी एपीआई विधियों का उपयोग करके डार्कडस्ट अस्वीकृति को रोकता नहीं है। ऐप्पल के मानक नियंत्रण को संशोधित करना जहां स्पष्ट रूप से ऐप्पल द्वारा इरादा नहीं है, वह जोखिम भी बढ़ावा देता है। अभी भी यह समाधान काम करता है और ** वर्तमान में ** ऐप्पल द्वारा अस्वीकार करने के अधीन नहीं है। – Till

0

उत्तर है: आप नहीं कर सकते। एयरप्ले के लिए अपने नियंत्रण प्रदान करने के लिए आईओएस 4.3 के रूप में कोई आधिकारिक विधि नहीं है - यदि आपको उस कार्यक्षमता की आवश्यकता है तो आपको मानक नियंत्रणों का उपयोग करने की आवश्यकता है।

2

MPVolumeView में वॉल्यूम स्लाइडर को छिपाने और रूट बटन दिखाने के लिए एक विशेषता है। तो चीजों को छिपाने के विचारों को पार करने की कोई ज़रूरत नहीं है।

MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:myContainerView.bounds] autorelease]; 
volumeView.showsVolumeSlider = NO; 
volumeView.showsRouteButton = YES; 
[myContainerView addSubview:volumeView]; 

AirPlay (मार्ग) बटन की नियुक्ति नहीं हो सकता है कि आप क्या उम्मीद तो आप थोड़ा देखने आप जहां चाहें, इसे पाने के लिए कंटेनर के फ्रेम खेलने के लिए हो सकता है।

+0

आप सही हैं। फिल्म चलाने से पहले मैं इसे दिखाना चाहता था :( – spd

संबंधित मुद्दे