2012-07-26 15 views
12

नहीं कहा जाता है जब ऐप लॉन्च करता है और प्रतिनिधि को एपडिलेगेट में सेट करता है तो मैं एक AVAudioSession स्थापित कर रहा हूं। सबकुछ काम कर रहा है (प्लेबैक, इत्यादि) सिवाय इसके कि प्रतिनिधि को कॉल प्राप्त होने पर प्रतिनिधि को अवरोध नहीं कहा जा रहा है। जब कॉल समाप्त होता है तो अंतराल को बुलाया जा रहा है।AVAudioSessionDelegate को अंतराल पर बुलाया जाता है, लेकिन प्रारंभ अंतराल को

मेरे पास एकमात्र विचार यह है कि मैं जिस ऑडियो प्लेयर कोड का उपयोग कर रहा हूं वह AVAudioPlayer पर आधारित है, लेकिन अब AVPlayer का उपयोग कर रहा है। इंटरप्ट्स को संभालने के लिए AVAudioPlayer प्रतिनिधि के लिए कॉलबैक अभी भी वहां हैं, लेकिन ऐसा लगता है कि वे किसी भी तरह से संघर्ष करेंगे।

+0

मैं एक ही स्थिति, एंड्रयू मार रहा हूँ, आप इसे हल करने में सक्षम थे? – Ethan

+0

क्या आप आईओएस 5.x में समस्या देख रहे हैं? – farski

+0

मैं केवल आईओएस 6 में एक ही चीज़ देख रहा हूं। बस अपग्रेड किया गया, लेकिन यह काम नहीं करता है। अगर आप इसे हल करते हैं तो मुझे बताएं। –

उत्तर

8

आईओएस 6 में हेडर को देखते हुए, ऐसा लगता है कि AVAudioSessionDelegate अब बहिष्कृत है।

आईओएस 6 में AVAudioSessionInterruptionNotification का उपयोग करें।

अद्यतन: यह काम नहीं किया। मुझे लगता है कि ढांचे में एक बग है।

हां, मेरे अनुभव में, प्रारंभ में रुकावट, न ही नए दस्तावेज AVAudioSessionInterruptionNotification ठीक से काम करते हैं। मुझे स्थानीय ध्वज का उपयोग करके प्लेयर की स्थिति को ट्रैक करना था, फिर बाधाओं से वसूली को ट्रैक करने के लिए endInterruption:withFlags: विधि को संभालें।

आईओएस 6 के साथ, बाधा से शुरू होने से आपके ऑडियोप्लेयर को सही जगह पर रखा जाएगा, इसलिए मेरे AVAudioPlayer के अंतिम ज्ञात प्ले टाइम को स्टोर करने की कोई आवश्यकता नहीं थी, मुझे बस खेलना पड़ा।

यहां समाधान है जिसके साथ मैं आया था। ऐसा लगता है जैसे आईओएस 6 मीडिया रीसेट के साथ आपके ऑडियो को मारता है यदि कोई एवीप्लेयर निवासी रहता है तो बहुत लंबा रहता है। क्या हो रहा है, AVPlayer खेलता है, लेकिन कोई आवाज नहीं आती है। AVPlayer पर दर 1 है, लेकिन बिल्कुल कोई आवाज नहीं है। स्थिति में दर्द जोड़ने के लिए, AVAudioSession setActive पर कोई त्रुटि नहीं है, न ही AVPlayer स्वयं इंगित करता है कि कोई समस्या है।

इस तथ्य को जोड़ें कि आप appWillResignActive पर निर्भर नहीं हो सकते हैं, क्योंकि यदि आप रिमोट कंट्रोल जेस्चर पर निर्भर हैं तो आपका ऐप पृष्ठभूमि में पहले से ही हो सकता है।

मैंने जो अंतिम समाधान लागू किया वह AVPlayer पर एक आवधिक पर्यवेक्षक जोड़ना था, और अंतिम ज्ञात समय रिकॉर्ड करना था। जब मुझे यह घटना प्राप्त होती है कि मुझे वापस नियंत्रण दिया गया है, तो मैं एक नया एवीप्लेयर बनाता हूं, इसे AVPlayerItem के साथ लोड करता हूं, और उचित समय पर तलाश करता हूं।

यह काफी परेशान कामकाज है, लेकिन कम से कम यह काम करता है, और होने वाली आवधिक दुर्घटनाओं से बचाता है।

+1

सहमत हुए। न तो AVAudioSessionInterruptionNotification और न ही AVAudioSessionRouteChangeNotification काम करने लगता है! मैंने ऐप्पल के साथ एक बग दायर किया है, और दूसरों को यह एपीआई 6.1 में तय करने की उम्मीद में ऐसा करने की सलाह देते हैं। https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/wa/signIn – clozach

4

मैं पुष्टि कर सकता हूं कि सी एपीआई का उपयोग करके, बाधा शुरू होने पर बाधा विधि भी नहीं बुलाई जाती है; केवल जब यह

(AudioSessionInitialize (nil, nil, interruptionListenerCallback, (__bridge void *)(self)); 

मैंने इस मुद्दे के लिए सेब के साथ एक बग रिपोर्ट भी दायर की है।

संपादित करें: यह आईओएस 6.1 में तय हो गई है (लेकिन नहीं आईओएस 6.0.1)

+0

सुनिश्चित नहीं है कि आपके कोड सेटअप में कोई समस्या है या नहीं, लेकिन मैं ऑडियो सत्र बाधा कॉलबैक को देख रहा हूं जब बाधा आईओएस 6 डिवाइस पर शुरू होता है। – hotpaw2

+0

दिलचस्प - मैंने [उदाहरण अपलोड किया है] (http://mixandmash.co.uk/sam/AudioInterruptions.zip) मैंने सेब को भेजा - क्या आप इसे जाने दे सकते हैं और देख सकते हैं कि एनएसएलओजी की शुरुआत को सूचित करने के लिए मुद्रित किया गया है या नहीं एक रुकावट? यह जानना दिलचस्प होगा कि क्या आप अपने ऑडियो सत्र अलग-अलग सेट कर रहे हैं? –

+0

उपर्युक्त प्रोजेक्ट IOS 6.1 बीटा –

0

मैं बस अपना iPhone 5 AudioSessionInterruptionListener कॉलबैक फ़ंक्शन में एक ब्रेकपाइंट कि घोषित किया गया था की स्थापना करके (iOS 6.0) पर जाँच AudioSessionInitialize() में, और यह अंतराल कॉलबैक करता है, वास्तव में, जब ऐप में सक्रिय ऑडियो सत्र और ऑडियो इकाई होती है और आने वाली फ़ोन कॉल में बाधा आती है (एक्सकोड दिखाता है कि ऐप बाधा की शुरुआत में ब्रेकपॉइंट पर रुक गया है , जो मैं तब से जारी है)।

मेरे पास ऐप है और फिर अपनी ऑडियो इकाई को रोकें और अपने ऑडियो सत्र को सक्रिय करें। फिर, अंतराल कॉलबैक पर, ऐप ऑडियो सत्र को फिर से सक्रिय करता है और बिना किसी समस्या के ऑडियो यूनिट को पुनरारंभ करता है (ऐप बाद में ठीक से ऑडियो रिकॉर्ड कर रहा है)।

+0

समस्या केवल मेरे लिए सतह पर लगती है अगर हम सीधे mpeg4aac पर एन्कोड करते हैं। कोई अन्य कोडेक और चीजें ठीक काम करती हैं। आप फाइल प्रारूप के रूप में क्या उपयोग कर रहे थे? –

0

मैंने आईओएस 6.0.x के ऊपर एक नया ऑडियो स्ट्रीमिंग (AVPlayer) एप्लिकेशन बनाया और एक ही समस्या पाई।

प्रतिनिधियों अब पदावनत कर रहे हैं और हम सूचनाओं का उपयोग करने के लिए है, तो बढ़िया है, फिर भी यहां मेरे निष्कर्ष है:

  1. इनकमिंग फ़ोन कॉल मैं अपने हैंडलर में केवल AVAudioSessionInterruptionTypeEnded मिलता है, AVAudioSessionInterruptionOptionShouldResume के साथ के दौरान। ऑडियो सत्र स्वचालित रूप से निलंबित हो जाता है (ऑडियो फीड) और मुझे बस AVPlayer के प्लेबैक को फिर से शुरू करने की आवश्यकता है।
  2. हालांकि, जब सीएसआर रेसिंग जैसे गेम को लॉन्च करने का प्रयास किया जाता है, तो मुझे अजीब AVAudioSessionInterruptionTypeBegan डर लगता है लेकिन कोई एप्लिकेशन नहीं जब मेरा एप्लिकेशन प्लेबैक फिर से शुरू कर सकता है, गेम को भी मार नहीं सकता है।
अब

, इस तरह के मेरे ऑडियो श्रेणी के रूप में अन्य कारकों, (मेरे मामले AVAudioSessionCategoryPlayback में) और दोनों अनुप्रयोगों (kAudioSessionProperty_OverrideCategoryMixWithOthers), मुझे यकीन है कि नहीं कर रहा हूँ के मिश्रण सेटिंग्स पर निर्भर हो सकता है, लेकिन निश्चित रूप से मैं गतिविधि देखते जगह।

उम्मीद है कि दूसरों ने बताया कि 6.1beta पर यह तय है और मुझे अभी भी अपग्रेड करना है, इसलिए हम देखेंगे।

2

बस फोन:

[[AVAudioSession sharedInstance] setDelegate: self]; 
+0

वह शुरूआत को ट्रिगर करेगा? – farski

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