7

मैं MPMoviePlayerController का उपयोग कर वीडियो चलाने के लिए निम्न कोड का उपयोग कर रहा हूं, लेकिन वीडियो नहीं खेला जाता है। क्या कोई मुझे बता सकता है क्यों ?MPMoviePlayerController का उपयोग कर वीडियो कैसे चलाएं?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/one.mp4"]; 

NSString *mediaPath = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:filePath]; 

    MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:mediaPath]]; 

    [[moviePlayer view] setFrame:[[self view] bounds]]; 
    [[self view] addSubview: [moviePlayer view]]; 


    moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 

    [moviePlayer play]; 
+0

में दिए गए चरण-दर-चरण निर्देशों पर काम किया है क्या आपने फ़ाइल का विस्तार निर्दिष्ट किया है? –

उत्तर

20

यह बहुत अजीब है, लेकिन ऐसा लगता है कि यदि आप अपने MPMoviePlayerController को स्थानीय चर के बजाय एक संपत्ति बनाते हैं तो ठीक है। लगता है कि दृश्यों के पीछे कुछ चल रहा है। मुझे लगता है कि यह एआरसी से संबंधित है। क्या आप एआरसी का उपयोग कर रहे हैं?

यह भी एक मुद्दा है कि आप अपने पथ पर-संलग्न है या नहीं:

// You've already got the full path to the documents directory here. 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/one.mp4"]; 
// Now you're appending the full path to the documents directory to your bundle path 
NSString *mediaPath = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:filePath]; 

जब मैं सिम्युलेटर में अपने कोड चलाने के लिए, पथ इस तरह दिखता है:

/उपयोगकर्ताओं/mlong/लाइब्रेरी/एप्लिकेशन सपोर्ट/आईफोन सिम्युलेटर/5.1/एप्लीकेशन/8 सीएफबी 9 बी 4 9-बीडी 6 ए -442C-ए 525-573FE343506D/VidoePlayer.app/उपयोगकर्ता/मैलॉन्ग/लाइब्रेरी/एप्लिकेशन सपोर्ट/आईफोन सिम्युलेटर/5.1/एप्लीकेशन/8 सीएफबी 9 बी 4 9-बीडी 6 ए -442C -ए 525-573FE343506D/दस्तावेज़/एक .mp4

यह सिर्फ इस होना चाहिए:

/उपयोगकर्ताओं/mlong/लायब्रेरी/एप्लिकेशन समर्थन/iPhone के सिम्युलेटर/5.1/अनुप्रयोग/8CFB9B94-BD6A-442C-A525-573FE343506D/दस्तावेज़/one.mp4

तो बस इस लाइन को हटाना:

NSString *mediaPath = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:filePath]; 

और फिर यह करने के लिए अपने खिलाड़ी इन्स्टेन्शियशन बदलने के लिए:

_moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:filePath]]; 

[[_moviePlayer view] setFrame:[[self view] bounds]]; 
[[self view] addSubview: [_moviePlayer view]]; 

_moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 

[_moviePlayer play]; 

तो आपको MPMoviePlayerController को अपने युक्त व्यू कंट्रोलर की संपत्ति के रूप में जोड़ना चाहिए।

+0

लगता है कि आपके पास एक स्पष्ट विवरण दिया गया है। मैंने इस मुद्दे को बहुत पहले हल कर लिया है। समस्या फ्रेम को सेट करने के साथ है और YES के रूप में प्लेप्ले प्ले और पूर्णस्क्रीन जोड़ा गया है। – Perseus

+0

@ पर्सियस आपने इसे कैसे हल किया? –

+0

हाय @ वैज्ञानिक। आप उपरोक्त टिप्पणी में देख सकते हैं कि मैंने उल्लेख किया है कि, मैं MPMoviePlayerController के लिए फ्रेम सेट करना भूल गया और एक संपत्ति तैयार करने के लिए भी जोड़ा गया। यह – Perseus

0

अपने बंडल सीधे और नहीं पूछ फ़ाइल पथ मैन्युअल

NSString *path = [[NSBundle mainBundle] pathForResource:@"name" ofType:@"mov"]; 
सेट करके देखें
-1
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:mediaPath]]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; 

आशा सहायता यह

3

ठीक है, वहाँ एप्लिकेशन बंडल बीच एक बड़ा अंतर है और दस्तावेज निर्देशिका। मेरा सुझाव है कि आप इसे देखें।

सबसे पहले, वीडियो कहां संग्रहीत किया जाता है?

यदि आपका वीडियो दस्तावेज़ निर्देशिका में है, तो दस्तावेज़ निर्देशिका पथ को बंडल पथ में शामिल न करें।

बस filePath चर के साथ प्रयास करें:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/one.mp4"]; 

MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL filePath]]; 

हालांकि, अगर फ़ाइल एप्लिकेशन बंडल में है, तो आप का उपयोग करना चाहिए क्या jinx जवाब में है (यदि आप इसे XCode में आपके प्रोजेक्ट में जोड़ी)।

+0

मैंने फ़ाइलपैथ के साथ भी कोशिश की, स्क्रीन काला हो रही है लेकिन वीडियो नहीं चल रहा है। – Perseus

+0

एफवाईआई, मैं अपनी परियोजना में फ़ाइलों को जोड़ने वाला नहीं हूं, मैं इसे केवल दस्तावेज़ निर्देशिका से प्राप्त करना चाहता हूं – Perseus

+0

MPMoviePlayerController का उपयोग करके वीडियो चलाने का कोई भी सरल उदाहरण काफी पर्याप्त होगा। यदि आप इस समस्या को हल करने में मेरी सहायता करते हैं तो मैं वास्तव में आपके लिए आभारी रहूंगा – Perseus

1
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
     [moviePlayer.view setFrame:CGRectMake(//set rect frame)]; 
     moviePlayer.controlStyle = MPMovieControlStyleDefault; 
     moviePlayer.shouldAutoplay=YES; 
     moviePlayer.repeatMode = NO; 
     [moviePlayer setFullscreen:YES animated:NO]; 
     [moviePlayer prepareToPlay]; 
[self.view addsubview:movieplayer.view]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerLoadStateDidChange:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil]; 


- (void)MPMoviePlayerLoadStateDidChange:(NSNotification *)notification { 

    if ((moviePlayer.loadState & MPMovieLoadStatePlaythroughOK) == MPMovieLoadStatePlaythroughOK) { 
//add your code 


    } 
} 
-1

मुझे समस्या को डीबग करने में मुझे कुछ मिनट लग गए लेकिन जवाब काफी सरल है।यहाँ सौदा है:

  • आप का उपयोग इस एक वेब यूआरएल से खेलने के लिए MPMoviePlayerViewController करना चाहते हैं: NSURL * यूआरएल = [NSURL URLWithString: @ "https://www.test.com/anyMovie.mp4"];

  • और तुम MPMoviePlayerViewController इस का उपयोग अनुप्रयोग बंडल से खेलने के लिए चाहते हैं: NSString * moviePath = [[NSBundle mainBundle] pathForResource: @ "anyMovie" ofType: @ "M4V"]; NSURL * url = [NSURL fileURLWithPath: moviePath];

यह के बाकी एक ही आप इस संपत्ति "movieSourceType" सेट करने के लिए को छोड़कर इस प्रकार है,:

MPMoviePlayerViewController *moviePlayerView = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; 
moviePlayerView.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
[self presentViewController:moviePlayerView animated:YES completion:^{}]; 
0

प्लेयर वीडियो का URL जो हम खेला जा करना चाहते हैं के साथ आरंभ नहीं हो जाता (यह या तो डिवाइस या लाइव यूआरएल की स्थानीय फाइल का पथ हो सकता है।) उस प्लेयर को वर्तमान दृश्य के उप दृश्य के रूप में जोड़ा जाता है। MPMoviePlayerController वर्ग द्वारा

समर्थित वीडियो प्रारूपों का अनुसरण कर रहे

  1. .mov .mpv .3gp .mp4

मुझे यकीन है कि आप कितना यह लेख आपके बाहर करने में मदद मिलेगी नहीं हूँ। यह मेरे लिए नया है। मैंने this article

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