2012-02-14 21 views
7

पर पृष्ठभूमि मोड में एक बाधित ऑडियो इनपुट कतार को पुनरारंभ नहीं कर सकता है मैं रिकॉर्डिंग के लिए ऑडियोक्यूयू का उपयोग करके एक आईओएस ऐप लिख रहा हूं। मैं रैखिक पीसीएम प्राप्त करने के लिए कॉन्फ़िगर एक इनपुट कतार बना देता हूं, यह कतार बताता है और सब कुछ अपेक्षित काम करता है।आईओएस

बाधाओं का प्रबंधन करने के लिए, मैंने शुरुआत और अंतराल के अंत को पकड़ने के लिए AVAudioSession के प्रतिनिधि तरीकों को लागू किया। विधि endInterruption निम्नलिखित की तरह दिखता है:

- (void)endInterruptionWithFlags:(NSUInteger)flags; 
{ 
    if (flags == AVAudioSessionInterruptionFlags_ShouldResume && audioQueue != 0) { 

     NSLog(@"Current audio session - category: '%@' mode: '%@'", 
       [[AVAudioSession sharedInstance] category], 
       [[AVAudioSession sharedInstance] mode]); 

     NSError *error = nil; 
     OSStatus errorStatus; 
     if ((errorStatus = AudioSessionSetActive(true)) != noErr) { 
      error = [self errorForAudioSessionServiceWithOSStatus:errorStatus]; 
      NSLog(@"Could not reactivate the audio session: %@", 
        [error localizedDescription]); 
     } else { 
      if ((errorStatus = AudioQueueStart(audioQueue, NULL)) != noErr) { 
       error = [self errorForAudioQueueServiceWithOSStatus:errorStatus]; 
       NSLog(@"Could not restart the audio queue: %@", 
         [error localizedDescription]); 
      } 
     } 
    } 
    // ... 
} 

तो एप्लिकेशन बाधित हो जाता है, जबकि यह अग्रभूमि में है, सब कुछ सही काम करता है। समस्या प्रकट होती है, अगर पृष्ठभूमि में बाधा होती है। ! त्रुटि बिल्ली में ऑडियो सत्र परिणाम सक्रिय कर रहा है:

निर्दिष्ट ऑडियो सत्र श्रेणी का प्रयास किया ऑडियो ऑपरेशन के लिए इस्तेमाल नहीं किया जा सकता है। उदाहरण के लिए, आपने ऑडियो सत्र श्रेणी के साथ ऑडियो को चलाने या रिकॉर्ड करने का प्रयास किया है जो kAudioSessionCategory_AudioProcessing पर सेट है।

त्रुटि कोड में सत्र परिणाम सक्रिय किए बिना कतार शुरू: -12985

उस बिंदु श्रेणी AVAudioSessionCategoryPlayAndRecord के लिए निर्धारित है पर और मोड AVAudioSessionModeDefault है।

मुझे इस त्रुटि संदेश के लिए कोई दस्तावेज़ नहीं मिला, और न ही पृष्ठभूमि में इनपुट ऑडियो कतार को पुनरारंभ करना संभव है।

उत्तर

0

वर्तमान में पृष्ठभूमि में होने पर पुनः सक्रिय करने का कोई तरीका नहीं है।

+0

मैंने ऐसा सोचा। :-( –

0

क्या आपने info.plist में अपना ऐप समर्थन पृष्ठभूमि बनाया है? मुझे यकीन है कि अगर रिकॉर्डिंग पृष्ठभूमि में संभव है नहीं कर रहा हूँ, लेकिन आप शायद "आवश्यक पृष्ठभूमि मोड" जोड़ने की जरूरत है और उसके बाद की है कि सरणी में एक मूल्य के "App ऑडियो निभाता है"

अद्यतन मैं बस की जाँच की और में रिकॉर्डिंग पृष्ठभूमि संभव है।

+0

रिकॉर्डिंग काम करता है पृष्ठभूमि में ठीक है। समस्या प्रकट होती है, अगर पृष्ठभूमि में ऑडियो सत्र बाधा समाप्त होती है। –

+0

क्या आपने रिमोट कंट्रोल इवेंट्स का उपयोग करने की कोशिश की है? जाहिर है कि उपयोगकर्ता को बटन हिट करना होगा। ** [[यूआईएप्लिकेशंस साझा अनुप्रयोग] startReceivingRemoteControlEvents]; ** –

+0

मुझे एक ही समस्या का सामना करना पड़ता है: जब पृष्ठभूमि में अनुप्रयोग होता है तो रिकॉर्डिंग बाधित होती है, एप्लिकेशन में किसी भी समय "अंत बाधा" अधिसूचना निकाल दी जाती है। चूंकि iTalk एप्लिकेशन उस प्रकार के बाधा को सही तरीके से प्रबंधित करता है, तो एक समाधान होना चाहिए ... – Denis

7

हाँ, यह संभव है, लेकिन पृष्ठभूमि में सत्र पुन: सक्रिय करने, ऑडियो सत्र या तो AudioSessionProperty kAudioSessionProperty_OverrideCategoryMixWithOthers

OSStatus propertySetError = 0; 
    UInt32 allowMixing = true; 



    propertySetError = AudioSessionSetProperty (
               kAudioSessionProperty_OverrideCategoryMixWithOthers, 
               sizeof (allowMixing), 
               &allowMixing 
               ); 

स्थापित करने के लिए है या एप्लिकेशन है receive remote control command events रहे हैं:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
[self becomeFirstResponder]; 
+0

धन्यवाद! मैं इसे कई दिनों तक पीछा कर रहा था! अगर मैं कर सकता तो मैं +10 करूँगा :-) –