2011-09-09 13 views
12

मुझे MPMoviePlayerController के साथ कुछ अजीबता का अनुभव है।MPMoviePlayerController setCurrentPlaybackTime गलत समय पर क्यों जाता है?

मैं एक वीडियो के वर्तमान प्लेबैकटाइम को सेट करने की कोशिश कर रहा हूं, जबकि यह खेल रहा है (फ़ाइल स्रोत)। यहाँ

  1. प्ले वीडियो
  2. हिट बटन होता है इस प्रकार 9.3 सेकंड के लिए वीडियो में
  3. प्ले स्थिति परिवर्तन कूद करने का एक उदाहरण है:

क) प्ले राज्य = 5 (MPMoviePlaybackStateSeekingBackward)। वर्तमान प्लेबैकटाइम = 15.74 (यह वह समय है जब मैंने बटन दबाया था)

बी) राज्य = 1 (एमपीएमवी प्लेबैकस्टेट प्लेइंग) चलाएं। currentPlaybackTime = 7.32

इससे कोई फर्क नहीं पड़ता कि मैं क्या प्रयास करता हूं और वर्तमान प्लेबैकटाइम को 7.32 के रूप में समाप्त करता हूं।

कुछ अतिरिक्त जानकारी: मुझे MPMoviePlayerController पर अंतर्निहित नियंत्रणों का उपयोग करके भी यह व्यवहार मिलता है। जैसे यदि मैं इसे 15 सेकंड तक स्क्रॉल करता हूं तो यह वापस 7.32

कोई विचार है? क्या यह मीडिया फाइल के साथ कुछ करना है?

+1

सटीक मांग सामग्री एन्कोडिंग के आधार पर है। आप वीडियो को फिर से कोड कर सकते हैं और अधिक आई-फ्रेम्स को मजबूर कर सकते हैं। इससे संपीड़न दर कम हो जाएगी लेकिन सटीक मांग की संभावना बढ़ जाएगी। – Till

+0

यह सामग्री के लिए विशिष्ट प्रतीत नहीं होता है। क्विकटाइम सटीक स्थान पर कैसे जा सकता है? – Ian1971

+0

नीचे देखें। यह पता चला है कि यदि आप एवीप्लेयर का उपयोग करते हैं तो आप तलाश का उपयोग कर सटीकता के बारे में अधिक विशिष्ट हो सकते हैं: सहिष्णुता: सहनशीलता विधि के बाद – Ian1971

उत्तर

6

आपको seekToTime या seekToTimeWithSeconds का उपयोग करना चाहिए।

CMTime npt = CMTimeMake(9,1); 
[self.player seekToTime:npt]; 

या

CMTime npt = CMTimeMakeWithSeconds(9.3, 600); 
    [self.player seekToTime:npt toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; 
+1

इससे कोई फर्क नहीं पड़ता - वर्तमान प्लेबैकटाइम ठीक है। – Till

+0

मैं पुष्टि कर सकता हूं कि मैं एवीप्लेयर पर स्विच करता हूं, इसके बजाय मुझे तलाशने के लिए एक ही समस्या है क्योंकि मैं वर्तमान प्लेबैकटाइम – Ian1971

+0

के साथ आगे की जांच पर करता हूं, एक और तलाश टॉटाइम विधि है जो नौकरी करने लगती है। seekToTime: सहनशीलता इससे पहले: सहनशीलता के बाद:। यदि आप केसीएमटाइमजेरो को सहिष्णुता के रूप में पास करते हैं तो यह सटीक प्रतीत होता है। – Ian1971

1

cdasher मुझे सही दिशा में इशारा किया, लेकिन यह आपको क्या करना चाहिए है:

seekToTime का उपयोग कर लें: toleranceBefore: नमूना सटीक के लिए toleranceAfter चाहता है। इसके लिए आपको AVPlayer नहीं MPMediaPlayerController

CMTime npt = CMTimeMakeWithSeconds(9.3, 600); 
[self.player seekToTime:npt toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; 
2

का उपयोग करना चाहिए यह एक देर से प्रतिक्रिया है, लेकिन मैं अपने मुद्दे को जो समान था के लिए एक समाधान मिल गया। आप प्लेबैक को निम्नानुसार संशोधित कर सकते हैं:

#define START_TIME 50.0f 
#define END_TIME START_TIME + 20.0f //play for 20 seconds 

MPMoviePlayerController *player = [self moviePlayerController]; 
[player stop]; 
[player setInitialPlaybackTime:START_TIME]; 
[player setEndPlaybackTime:END_TIME]; 
[player play]; 
+1

के लिए कोई फ़ंक्शन नहीं है, यह काम नहीं करेगा, यह वर्तमान प्लेबैकटाइम संपत्ति – rakeshNS

+0

स्टंट करने जैसा ही है हाँ यह अब काम नहीं करता है ... आप सही हैं। यह काम तब हुआ जब इसे मूल रूप से 5 अक्टूबर, 2011 को प्रकाशित किया गया था। –

+4

MPMoviePlayerController सबसे खराब ऐप्पल एपीआई है। यह बहुत गड़बड़ है। प्रारंभिक प्लेबैक समय और अंत प्लेबैक समय सेट करना इसे init'ing के बाद पहली बार काम करता है। एक बार यह खेलना शुरू हो जाता है, अगर मैं इसे रोकना चाहता हूं और इसे उसी बिंदु से फिर से शुरू करना चाहता हूं, तो मुझे इसे काम करने के लिए एक नया उदाहरण आवंटित करना होगा। मैंने बग के अपने मैनेजर पर अनगिनत घंटे खो दिए हैं। – n8tr

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