2013-10-31 11 views
7

मैं विचारों से बाहर वास्तव में कर रहा हूँ तो मैं तुम लोगों से फिर से पूछने के लिए होगा ...AVPlayer सिंक्रनाइज़ नहीं

मैं जो AVPlayer के तीन उदाहरणों का उपयोग करता है एक iPhone आवेदन के निर्माण कर रहा हूँ। वे सभी एक ही समय में खेलते हैं और यह बहुत महत्वपूर्ण है कि वे ऐसा करते हैं। मैं इस कोड को चलाने के लिए प्रयोग करता था:

CMClockRef syncTime = CMClockGetHostTimeClock(); 
CMTime hostTime = CMClockGetTime(hostTime); 
[self.playerOne setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime]; 
[self.playerTwo setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime]; 
[self.playerThree setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime]; 

जो पूरी तरह से काम करता था। लेकिन कुछ दिन पहले यह काम करना बंद कर दिया था, तीन खिलाड़ियों को 300-400ms तक देरी हो रही है (जो कि बहुत अधिक है, 100ms से कम सबकुछ ठीक होगा)। इनमें से दो एवीप्लेयर में कुछ ऑडियो प्रसंस्करण होता है, जो "सामान्य" एवीप्लेयर से कुछ समय लेता है, लेकिन यह पहले काम करता था और वर्तमान समय की संपत्ति मुझे बताती है कि इन खिलाड़ियों में देरी हो रही है, इसलिए समन्वयन विफल हो रहा है।

मुझे नहीं पता कि यह क्यों काम करना बंद कर दिया है, मैंने वास्तव में कुछ नहीं बदला है, लेकिन मैं एक पर्यवेक्षक का उपयोग कर रहा हूं जहां मैं self.playerX.currentTime प्रॉपर्टी से पूछ सकता हूं, जो मुझे देरी देता है .3- .4 सेकंड ... अगर देरी हो तो मैं पहले ही खिलाड़ियों को पुनर्वितरण करने की कोशिश करता हूं> .1 एफ लेकिन देरी अभी भी वहां है। तो मुझे लगता है कि प्लेयर 1 और 2 की ऑडियो प्रसंस्करण देरी के लिए उत्तरदायी नहीं हो सकती है, क्योंकि वर्तमान समय संपत्ति को पता है कि वे देरी कर रहे हैं (मुझे उम्मीद है कि आप जानते हैं कि मेरा क्या मतलब है)। शायद आप में से कोई भी जानता है कि मुझे इतनी भयानक देरी क्यों है, या मुझे एक और विचार प्रदान करने में सक्षम है।

अग्रिम धन्यवाद!

उत्तर

13

तो, मुझे समाधान मिला। मैं [self.playerX prerollAtRate:] भूल गया था। मैंने सोचा कि अगर पर्यवेक्षक AVPlayerReadyToplay का मतलब है, तो खिलाड़ी "वास्तव में" तैयार है। वास्तव में, यह नहीं है। AVPlayer के लिए तैयार होने के बाद, इसे पहले से लुढ़का जाना है। एक बार ऐसा करने के बाद आप अपने प्लेसर को सिंक कर सकते हैं। देरी अब कहीं 0.000006 सेकंड पर है।

+0

साझा करने के लिए धन्यवाद, यह समाधान बहुत उपयोगी था। –

+0

क्या यह दूरस्थ संपत्तियों के साथ भी काम करता है? – zevarito

+0

धन्यवाद मैक्स, क्या आप मूल कोड को शामिल करने के लिए अपना उत्तर संपादित कर सकते हैं? मुझे समझ में नहीं आता है, प्रीरेट एट्रेट के पूरा करने वाले हैंडलर में प्रत्येक खिलाड़ी के लिए सेटरेट कहा जाता है? –