2011-05-31 18 views
6

HI मैं फ्रेम द्वारा धीरे-धीरे वीडियो को चलाने के लिए AVPlayer का उपयोग कर रहा हूं। मैंने इसके लिए इस कोडिंग का इस्तेमाल किया। मैं वीडियो चलाने में सक्षम नहीं था। कृपया मेरी समस्या देखें।एवीप्लेयर वीडियो फ़ाइल नहीं चला रहा

UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 440)]; 
newView.backgroundColor = [UIColor yellowColor]; 

NSString *videoName = [fileNameArray objectAtIndex:indexPath.section]; 
NSString *url = [Utilities documentsPath:[NSString stringWithFormat:@"OSC/%@/%@.mov",videoName,videoName]]; 

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:url]]; 
//AVPlayer *avPlayer = [[AVPlayer playerWithURL:[NSURL URLWithString:url]] retain]; 
AVPlayer *avPlayer = [[AVPlayer playerWithPlayerItem:playerItem] retain]; 
AVPlayerLayer *avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:avPlayer] retain]; 

avPlayerLayer.frame = self.view.frame; 
[newView.layer addSublayer:avPlayerLayer]; 
[self.view addSubview:newView]; 
[avPlayer play]; 

avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playerItemDidReachEnd:) 
              name:AVPlayerItemDidPlayToEndTimeNotification 
              object:[avPlayer currentItem]]; 
+0

ज़रूर, कृपया मेरी समस्या के बारे में कुछ सुझाव दे कृपया .... – Ganesh

उत्तर

4

मुझे फ्रेम धीमेपन से फ्रेम के बारे में पता नहीं है, लेकिन आप कुछ ऐसी चीजें कर रहे हैं जिन्हें आपको करने की आवश्यकता नहीं है। आईफोन प्रलेखन में, ऐप्पल लोग पूरी तरह से स्मृति प्रबंधन के साथ गड़बड़ कर रहे हैं, जिससे इसे और अधिक जटिल बनाने की आवश्यकता है, इसलिए मैं आपको यह महत्वपूर्ण बातें बताऊंगा जो इसे खेलते हैं:

सबसे पहले, खिलाड़ी को बनाए रखें, नहीं परत। यदि आपको नहीं पता कि क्यों, एक पुस्तक या दृश्य मैनुअल पढ़ें। (जो homonym-style typos से भरा है, लेकिन मोटी किताब खरीदने से यह आसान है)।

दूसरा, आपने परत नहीं डाली और सेटप्लेयर का उपयोग नहीं किया: सटीक रेखा ऐप्पल के दस्तावेज़ों के अंदर है। आपको टाइपकास्ट का उपयोग करके self.layer को परिवर्तित करना होगा।

+1

नोट करने के लिए, AVPlayer वर्ग संदर्भ में कुछ रोचक लिखने की त्रुटियों भी है, AspectRatio स्थिरांक लिस्टिंग तो डिफ़ॉल्ट कह की तरह भूल "प्लेयर" है, जिसका दस्तावेज़ीकरण से कोई लेना देना नहीं है। मैं उन्हें रिपोर्ट नहीं कर रहा हूं क्योंकि वे उस सामान के बारे में झटके हैं, लेकिन आप अभी भी इसे – fightingshadow

+0

पर देख सकते हैं धन्यवाद और मैंने नमूना कोड के साथ अपनी प्रक्रिया की है। – Ganesh

11

क्योंकि आप स्थानीय फ़ाइल का उपयोग करते हैं, तो एनएसएसटींग से NSURL में कनवर्ट करने के लिए [NSURL fileURLWithPath:url] का उपयोग करना बेहतर है। तो करने के लिए कोड बदलने के लिए:

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:url]]; 
+1

इसे कई बार कई बार वोट दिया जाना चाहिए। URLWithString का उपयोग करने से चुप त्रुटियों का परिणाम होगा - त्रुटि == शून्य, player.status == AVPlayerStatus अज्ञात। fileURLWithPath पर स्विच करने से तुरंत गैर-प्लेइंग समस्या हल हो गई। – mahboudz

+1

@mahboudz सहमत हुए! इसने मेरी समस्या भी हल की। धन्यवाद! – unicornherder

+0

मैं '[NSURL urlWithString:] 'का उपयोग कर रहा था, धन्यवाद! – Mike

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