2016-02-13 6 views
7

मेरा आईओएस ऐप वेब से मीडिया स्ट्रीम करने के लिए AVPlayer का उपयोग करता है। मैं बफरिंग (playbackBufferEmpty) जैसी घटनाओं का पता लगाने के लिए केवीओ का उपयोग कर रहा हूं और पकड़ा जा रहा है (playbackLikelyToKeepUp)। हालांकि, मैंने एक बेहद विशिष्ट बग देखा है। हालांकि अधिकांश नेटवर्क मंदी के दौरान, playbackBufferEmpty केवीओ मारा जाता है, और जब यह ठीक हो जाता है, तो playbackLikelyToKeepUp केवीओ अपेक्षित हिट होता है, मैंने देखा है कि (कुछ आवृत्ति के साथ) AVPlayer कुछ समय के लिए बफर करेगा, पुनर्प्राप्त करें, playbackLikelyToKeepUp हिट है , ऑडियो शायद 1-3 सेकंड के लिए खेलता है, और फिर ऑडियो फिर से खेलना बंद कर देता है जैसे कि यह playbackBufferEmpty केवीओ को फिर से मार रहा है। और यह इससे ठीक नहीं होता है।एवीप्लेयर बफरिंग के बाद पुनर्प्राप्त नहीं

टी एल; डॉ: playbackBufferEmpty (10-20 सेकंड) ->playbackLikelyToKeepUp -> बंद हो जाता है खेल रहे हैं, लेकिन कोई KVO मारा जाता है -> 1-3s लिए खेलता है।

सबसे खराब हिस्सा तब होता है जब यह होता है, AVPlayer बफरिंग से पुनर्प्राप्त होने पर फिर से खेलना शुरू नहीं करता है, और ऐप तब तक चुप है जब तक AVPlayer मैन्युअल रूप से बंद/प्रारंभ नहीं होता है। अंत में, जब भी मैं स्ट्रीम करता हूं, यह कम या ज्यादा होता है। क्या यह AVPlayer के साथ ज्ञात समस्या है? क्या यह कुछ तीसरा केवीओ कार्यक्रम है जिसके लिए मैं देख सकता हूं? या इस पर डीबग करने के तरीके पर कोई सुझाव? धन्यवाद!

संपादित: अतिरिक्त जानकारी: AVPlayer के error संपत्ति nil जब ऐसा होता है है, status संपत्ति खेलने के लिए तैयार है, और rate संपत्ति 1. उर्फ ​​किसी और अजीब कुछ भी नहीं है मैं के रूप में चल रहा है के रूप में दूर है कह सकते हैं।

उत्तर

0

मैं भी AVPlayer बफरिंग/नेटवर्क समस्याओं से उबरने के साथ मुद्दों का अनुभव किया है, और मैं भी ठीक उसी परिदृश्य है जहां avPlayer.status.readyToPlay है, avPlayer.errornil है, और avPlayer.rate1 है। अविश्वसनीय के बारे में बात करो! मैंने errorLog() भी चेक किया है और यह सामान्य इंटरनेट कनेक्शन त्रुटि के अलावा कुछ भी प्रासंगिक नहीं प्रदान करता है।

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

तब मैं इसे एक अप्राप्य स्थिति के रूप में मानता हूं और एक नया AVPlayerItem बनाकर पूरी स्ट्रीम को पुनः लोड करता हूं।

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