2011-01-31 11 views
21

मैं iPhone के लिए एक इंटरैक्टिव कहानियों प्रकार आवेदन विकासशील रहा हूँ और मैं हाल ही में डिवाइस पर मिश्रण ऑडियो के विषय में एक निराशा बग का सामना किया है।MPMoviePlayerController और AVAudioPlayer ऑडियो मिश्रण गड़बड़

सबसे पहले, मैंने एक ऑडियो सत्र स्थापित किया। मैं AVAudioSessionCategoryAmbient को init श्रेणी सेट और फिर और मेरे AVAudioPlayer उदाहरण खेलते हैं। अब, ऑडियो, जबकि पृष्ठभूमि में खेल रहा है मैं पहले से लोड हो रहा है कर रहा हूँ एक MPMoviePlayerController prepareToPlayके लिए एक कॉल के बाद का उपयोग कर चलाने के लिए वीडियो। इस तरह से वीडियो को प्री-लोड करने का कारण यह है कि मुझे तुरंत सख्त समय के साथ क्यू पर तुरंत खेलने की आवश्यकता है।

इस कॉन्फ़िगरेशन में, ऑडियो/मूवी ठीक काम करती है और वे मिश्रण करते हैं और एक-दूसरे को बाधित नहीं करते हैं। हालांकि, यह विशेष ऑडियो सत्र श्रेणी डिवाइस लॉक होने पर ऑडियो जारी रखने की अनुमति नहीं देती है, एक सुविधा जो मुझे वास्तव में चाहिए। नतीजतन मुझे एक अलग श्रेणी पर विचार करने के लिए मजबूर किया गया है: AVAudioSessionCategory प्लेबैक

डिफ़ॉल्ट रूप से इस श्रेणी अन्य ऑडियो के साथ मिश्रण की अनुमति नहीं देता, according to the Apple docs। अन्य ऑडियो मैं प्रासंगिक श्रेणी अधिभावी कर रहा हूँ के साथ मिश्रण करने के लिए सक्षम करने के लिए:

OSStatus propertySetError = 0; 
UInt32 setProperty = 1; 
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(setProperty), &setProperty); 
assert(propertySetError == 0); 

दुर्भाग्य से, इस दौरान बंद मुद्दा मेरे खेल को हल करती है, लेकिन एक और मुद्दा परिचय: AVAudioPlayer ऑडियो एक छोटी सी हकलाना के साथ वीडियो लोड के रूप में संक्षेप में बाधा आती है । स्टटर छोटा है, शायद एक सेकंड से भी कम है लेकिन उपयोगकर्ता अनुभव को बाधित करने के लिए पर्याप्त है। मैं this related post जो मुझे सक्षम AVAudioSessionCategoryAmbient के साथ वीडियो पहले से लोड करने पढ़ा है, लेकिन दुर्भाग्य से एक ही दृष्टिकोण नई श्रेणी के साथ काम करने लगता है।

रिटर्न कोड के अनुसार ऑडियो सत्र श्रेणी सफलतापूर्वक लागू की जाती है। क्या किसी को पता है कि इस श्रेणी के साथ ऑडियो मिश्रण को सक्षम करने से परिवेश श्रेणी द्वारा प्रदान की जाने वाली मिश्रण सुविधा के समान नहीं है?

+0

स्टैक ओवरव्लो में आपका स्वागत है। अच्छा प्रश्न! – Moshe

+1

धन्यवाद! मुझे उम्मीद है कि मेरे पास स्वरूपण सही है! – jdmunro

+1

क्या आपने दो ढांचे के बीच मिश्रण करने के बजाय वीडियो प्लेबैक करने के लिए AVPlayer का उपयोग करने का प्रयास किया है? – adam

उत्तर

1

मुझे एक ही समस्या का सामना करने का सबसे अच्छा तरीका है AVPlayer (+1 @adam) का उपयोग करना और पृष्ठभूमि ऐप को सक्षम करने और रिमोट कंट्रोल नोटिफिकेशन प्राप्त करने के लिए अपना ऐप सेट करना है। How can you play music from the iPod app while still receiving remote control events in your app?

यदि आप पृष्ठभूमि को सही ढंग से काम कर सकते हैं, तो आपको इसे बंद कर दिया गया है, जिससे डिवाइस को लॉक होने पर आपको खेलना जारी रखने में सक्षम होना चाहिए। ओह, और info.plist पर चाबियाँ जोड़ने के लिए मत भूलना, यह करना आसान है और फिर यह नहीं पता कि यह क्यों काम नहीं कर रहा है।

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

  • कोई संबंधित समस्या नहीं^_^