2014-10-04 22 views
10

के बाद पृष्ठभूमि में ऑडियो स्ट्रीमिंग बंद कर देता है मेरे पास एक ऐप है जो SHOUTcast सर्वर से स्ट्रीमिंग ऑडियो चलाता है। जब ऐप अग्रभूमि पर होता है और ऑटो-लॉक अक्षम होता है तो सब कुछ ठीक काम करता है। हालांकि ऐप पृष्ठभूमि में ऑडियो चलाने में भी सक्षम है, यह सुविधा हमेशा आईओएस 6 और आईओएस 7 पर ठीक काम कर रही है। लेकिन अब मेरे उपयोगकर्ता रिपोर्ट कर रहे हैं कि पृष्ठभूमि ऑडियो आईओएस 8 में अपग्रेड करने के लगभग 10 मिनट बाद बंद हो जाता है।आईओएस 8 10 मिनट

मैं आईओएस 8 पर बस ऐप चलाकर समस्या को पुन: उत्पन्न करने में सक्षम हूं। चूंकि ऐप स्वयं बहुत जटिल है, इसलिए मैंने समस्या दिखाने के लिए एक सरल डेमो बनाया है। मैं एक्सकोड 6 का उपयोग कर रहा हूं और बेस एसडीके आईओएस 8 पर सेट है। मैंने ऑडियो से UIBackgroundModes को मेरी Info.plist में जोड़ा है। क्या किसी को पता है कि नीचे दिए गए कोड में क्या गलत है?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    NSURL *streamingURL = [NSURL URLWithString:@"http://www.radiofmgold.be/stream.php?ext=pls"]; 

    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:streamingURL]; 
    [self setPlayerItem:playerItem]; 

    AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; 
    [player setAllowsExternalPlayback:NO]; 

    [self setPlayer:player]; 
    [player play]; 

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
    [[AVAudioSession sharedInstance] setActive: YES error: nil]; 

    return YES; 
} 
+0

यदि आप पाते हैं तो कृपया इसे ठीक करें। मेरे उपयोगकर्ता भी इस समस्या की रिपोर्ट कर रहे हैं। मैं इसे पुन: उत्पन्न नहीं कर सकता। – RawMean

+0

मैं पहली बार समस्या को पुन: उत्पन्न करने में असमर्थ था क्योंकि समस्या सभी स्ट्रीमिंग लिंक के साथ नहीं होती है। हालांकि, मेरे कोड में स्ट्रीम हमेशा आईओएस 7 पर ठीक काम करने के दौरान दस मिनट के बाद रुकती है। वास्तव में परेशान है क्योंकि यह स्ट्रीमिंग मेरे ऐप की मुख्य कार्यक्षमता है और मैं अभी-अभी उपयोगकर्ताओं से एक-सितारा समीक्षा और शिकायतों से अभिभूत हूं । मैं इस प्रश्न ASAP पर एक बक्षीस निर्धारित करूंगा लेकिन मुझे डर है कि यह ऐप्पल के हिस्से पर एक बग है। मुझे उम्मीद है कि मैं इसे स्वयं ठीक कर सकता हूं .. मेरा ऐप मूल रूप से इस कार्यक्षमता पर निर्भर करता है। – s1m0n

+0

हाय दोस्तों, मुझे एक ही समस्या का सामना करना पड़ रहा है। मुझे लगता है जैसे ऐप्पल ने इसे खराब कर दिया। मेरे मामले में जब तक स्ट्रीम बंद नहीं हो जाती तब तक काफी भिन्न होता है (12 मिनट तक 5 मिनट)। ऐसा लगता है कि स्ट्रीम अचानक कनेक्शन खो देता है और तब तक चलाता है जब तक यह बफर किए गए डेटा से बाहर नहीं हो जाता। ऐसा होता है जब ऐप अग्रभूमि में होता है और साथ ही जब यह पृष्ठभूमि में होता है। इसे संभालने का एकमात्र तरीका AVPlayerItem की स्थिति का निरीक्षण करना है। मैं इसे एक उत्तर के रूप में पोस्ट करूंगा। – Hendrik

उत्तर

6

मुझे आईओएस 8.0.2 के तहत एक ही समस्या का अनुभव हुआ। एमपी 3 में मेरा रिमोट ऑडियो स्रोत चलाता है। ऐसा लगता है कि एक आंतरिक त्रुटि AVAudioSession को पुनरारंभ करने का कारण बन रही है। आप इसे विभिन्न तरीकों से संभाल सकते हैं:

आप AVPlayerItem की स्थिति का निरीक्षण कर सकते हैं। अगर यह सब बदल जाता है -

void* YourAudioControllerItemStatusContext = "YourAudioControllerItemStatusContext"; 
... 
@implementation YourAudioController 
... 
- (void)playStream { 
    ... 
    AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:streamUrl]; 
    [item addObserver:self forKeyPath:@"status" options:0 context:MJAudioControllerItemStatusContext]; 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    if (context == YourAudioControllerItemStatusContext) { 
     AVPlayerItem *item = object; 
     if (item.status == AVPlayerItemStatusFailed) { 
      [self recoverFromError]; 
     } 
    } 

इस तरह के बाद से वहाँ एक विशाल समय विलंब हो सकता है जब तक AVPlayerItem के राज्य में परिवर्तन विश्वसनीय नहीं हो रहा है।

मैं observeValueForKeyPath के माध्यम से डिबग और पता चला कि AVPlayerItem के राज्य AVErrorMediaServicesWereReset को बदल देता है और एक त्रुटि कोड -11,819 सेट है।

चूंकि मैंने AVErrorMediaServicesWereReset त्रुटि का अनुभव किया है, मैंने शोध किया कि इस त्रुटि का कारण क्या है - यह AVAudioSession पागल हो रहा है। ऐप्पल से Technical Q&A का जिक्र करते हुए आपको AVAudioSessionMediaServicesWereResetNotifications के लिए पंजीकरण करना चाहिए। अपने कोड में है कि कहीं रखो:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioSessionWasReset:) name:AVAudioSessionMediaServicesWereResetNotification object:nil]; 

फिर इस पद्धति जोड़ें:

- (void)audioSessionWasReset:(NSNotification *)notification { 
    [self recoverFromError]; 
} 

recoverFromError विधि में निम्न में से एक का प्रयास करें:

  • एक चेतावनी है कि वर्णन करता है कि एक theres दिखाने आईओएस 8 के तहत समस्या और धारा को पुनरारंभ करने की आवश्यकता है
  • AVAudioSession को फिर से सक्रिय करके स्ट्रीम को पुनरारंभ करें और एक नया चालू करें AVPlayer उदाहरण के साथ एक नया AVPlayerItem

इस समय एकमात्र तरीके हैं जो मुझे पता है कि इसे कैसे संभालना है। सवाल यह है कि ऑडियो सत्र फिर से शुरू हो रहा है।

अद्यतन आईओएस 8.1 तेजी की रिहाई समस्या हल हो जाती है,।

5

मैंने भी एक ही समस्या का अनुभव किया है, और आईओएस 8.0.2 चलाने वाले आईफोन 5 एस और आईपैड मिनी रेटिना आईओएस 8.1 बीटा 2 पर इसका परीक्षण किया है, जिसका अर्थ है कि यह आगामी बीटा में तय नहीं है। दोनों ने लगभग 30 मिनट के बाद ऑडियो बजाना बंद कर दिया।

जब AVPlayer.status == AVPlayerItemStatusFailed आप त्रुटि के बारे में अधिक जानकारी के लिए AVPlayer.status को लॉग आउट कर सकते हैं। मैं प्राप्त करते हैं:

Error Domain=AVFoundationErrorDomain Code=-11819 "Cannot Complete Action" UserInfo=0x178a75bc0 {NSLocalizedDescription=Cannot Complete Action, NSLocalizedRecoverySuggestion=Try again later.}

यहां तक ​​कि जब यह पकड़ने और रोकने के लिए और मेरे खिलाड़ी शुरू करने की कोशिश, मैं तो मुझे बताने की कि AVPlayer पुनः आवंटित की जाती किया गया है एक गंभीर त्रुटि प्राप्त करते हैं। इस बिंदु पर हेन्ड्रिक द्वारा सुझाए गए एक नए एवीप्लेयर उदाहरण को फिर से शुरू करने की कोशिश करने लायक हो सकता है। यह अभी भी इस तथ्य को हल नहीं करता है कि जब आप पुन: प्रारंभ करने का प्रयास करते हैं तो ऑडियो अस्थायी रूप से कट जाएगा। इससे पहले कि आप इसे पुनः आरंभ कर सकें, आपका एवीप्लेयर अधिसूचनाएं भी प्राप्त कर सकता है, जिसका अर्थ है कि आपको घातक त्रुटि मिलेगी; यह एक स्थायी फिक्स से बहुत दूर है।

शायद किसी और के पास इसके साथ और अधिक भाग्य होगा और एक और ठोस समाधान प्रदान कर सकता है। इस बीच, मैंने ऐप्पल को यह बग भी बताया है।

अपडेट 15 अक्टूबर 2014: ऐप्पल ने इस स्थिति के साथ मेरी बग रिपोर्ट बंद कर दी है: 18152675 (बंद) का डुप्लिकेट।

4

ऐसा लगता है कि आईओएस 8.1 में तय हो गई है

+0

हां, मैंने प्रश्न में नमूना कोड चलाया और स्ट्रीमिंग 30 मिनट तक जारी रही (जिसके बाद मैंने इसे मैन्युअल रूप से रोक दिया)। मुझे आश्चर्य है कि यह आईओएस 8.0 बग पेंडोरा और स्पॉटिफी को क्यों प्रभावित नहीं करता था। – RawMean

0

यह समस्या iOS8.1 अद्यतन के साथ निर्धारित किया गया है लगता है। मैंने कल इसे अपडेट किया और अपडेट से पहले 45 मिनट के लिए स्ट्रीम करने में सक्षम था, यह 10-15 मिनट के भीतर दुर्घटनाग्रस्त हो जाएगा।

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