2012-10-10 33 views
30
का उपयोग कैसे करें

मैं एक खाली परियोजना (आईओएस) बना लिया है और मेरी viewDidLoad में रखते:iOS: MPMoviePlayerController

NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"]; 
MPMoviePlayerViewController *playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:moviePath]]; 
[self presentMoviePlayerViewControllerAnimated:playerController]; 
[playerController.moviePlayer play]; 

जब एप्लिकेशन को सभी मैं शुरू होता है में त्रुटि संदेश के साथ एक सफेद स्क्रीन है लॉग इन करें:

<Error>: CGContextSaveGState: invalid context 0x0 
<Error>: CGContextClipToRect: invalid context 0x0 
<Error>: CGContextTranslateCTM: invalid context 0x0 
<Error>: CGContextDrawShading: invalid context 0x0 
<Error>: CGContextRestoreGState: invalid context 0x0 
Warning: Attempt to present <MPMoviePlayerViewController: 0x821e3b0> on <ViewController: 0x863aa40> whose view is not in the window hierarchy! 

... और ऑटोप्ले अक्षम करने के बारे में लाइनों की एक गुच्छा। मैं विशेष रूप से पदानुक्रम का हिस्सा नहीं होने के दृश्य के बारे में समझ में नहीं आता क्योंकि यह एक खाली "सिंगल व्यू एप्लिकेशन" आईओएस प्रोजेक्ट है और कोड ViewController.m में है। यह दृश्य पदानुक्रम में है।

मुझे इस तथ्य के बारे में पता है कि फिल्म फ़ाइल स्वयं समस्या नहीं है क्योंकि मुझे इसे MPMoviePlayer पर ऐप्पल के नमूना कोड से मिला है। और हालांकि मैंने (प्रतीत होता है) नमूना में लिखे गए सबकुछ की कोशिश की, मैं बस खिलाड़ी को काम करने के लिए नहीं मिला।

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
[player setContentURL:url]; 
[player setMovieSourceType:MPMovieSourceTypeFile]; 

[[player view] setFrame:self.view.bounds]; 
[player view].backgroundColor = [UIColor greenColor]; 

player.scalingMode = MPMovieScalingModeNone; 
player.controlStyle = MPMovieControlModeDefault; 
player.backgroundView.backgroundColor = [UIColor whiteColor]; 
player.repeatMode = MPMovieRepeatModeNone; 

[self.view addSubview: [player view]]; 
[player play]; 

इसी प्रकार के परिणाम, सफेद स्क्रीन और त्रुटियों के साथ:

यहाँ एक और कोशिश, MPMoviePlayerController (नहीं MPMoviePlayerViewController) के साथ इस समय है। कृपया मदद ....

+0

'viewDidAppear' में डालने की कोशिश करो। –

+0

इसे देखने में डाइडएपियर ने संदर्भ त्रुटियों को हल किया, धन्यवाद, लेकिन मुझे अभी भी खिलाड़ी नहीं मिला है, सिर्फ एक सफेद स्क्रीन –

उत्तर

89

बाहर कर देता है हम सभी के लिए है ऐसा करें:

NSURL *movieURL = [NSURL URLWithString:@"http://example.com/somefile.mp4"]; 
movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL]; 
[self presentMoviePlayerViewControllerAnimated:movieController]; 
[movieController.moviePlayer play]; 
  • movieControllerMPMoviePlayerViewController का एक उदाहरण ज फ़ाइल में घोषित है।

  • महत्वपूर्ण: जब परिभाषित करने URL का उपयोग NSURL के URLWithString विधि आप एक नेटवर्क के माध्यम से फ़ाइल का उपयोग और उपयोग करना चाहते हैं NSURL के fileUrlWithPath यदि आप फ़ाइल को स्थानीय रूप है!

  • [movieController.moviePlayer play] की आवश्यकता नहीं है और खिलाड़ी भले ही शुरू कर देंगे आप नहीं करने के लिए ऑटोप्ले सेट नहीं किया है, लेकिन मैंने देखा कि अगर आप इसे में play डाल यह थोड़ा जल्दी शुरू होता है। यह सिर्फ एक संयोग हो सकता है।

  • आप पता करने के लिए जब उपयोगकर्ता टैप किया बटन (खिलाड़ी स्वचालित रूप से खारिज कर दिया जाएगा) आपको पता होना चाहिए कि -viewDidAppear जब खिलाड़ी को खारिज कर दिया है प्रतीत होता है कि दृश्य नियंत्रक पर कहा जाता है चाहते हैं। जब आप खिलाड़ी में BOOL में प्रारंभ करते हैं और -viewDidAppear में चेक करते हैं तो आप BOOL वैरिएबल सेट कर सकते हैं ताकि आप जान सकें कि -viewDidAppear को प्लेयर को बर्खास्त कर दिया गया था। वैकल्पिक रूप से आप MPMoviePlayerDidExitFullScreen अधिसूचना के लिए पंजीकरण कर सकते हैं, लेकिन यह मेरे लिए काम नहीं करता है।

या, अगर यह काम नहीं कर रहा तुम सिर्फ कर सकते हैं निम्नलिखित

self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"something" ofType:@"mp4"]]]; 
[self.moviePlayer.view setFrame:CGRectMake(0, 0, 320, 320)]; 
[self.moviePlayer play]; 
[self.view addSubview:self.moviePlayer.view]; 
  • self.movieplayer MPMoviePlayerController (नहीं MPMoviePlayerViewController) का एक उदाहरण है। मेरे अनुभव में इसे एक साधारण ivar की बजाय एक संपत्ति के रूप में घोषित करना महत्वपूर्ण है (जैसे: @property (strong, nonatomic) MPMoviePlayerController *moviePlayer;), क्योंकि कभी-कभी यह काम नहीं करता है अगर यह एक ivar

  • फ्रेम सेट करना भी महत्वपूर्ण है, क्योंकि अगर हम इसे सेट न करें, वीडियो बिल्कुल दिखाई नहीं देगा। फ्रेम कुछ भी हो सकता जब तक कि तुम क्या परिभाषित अपने दृश्य की सीमाएँ

  • महत्वपूर्ण के भीतर है के रूप में: जैसा कि ऊपर, जब URL निर्दिष्ट NSURL के URLWithString विधि का उपयोग आप एक नेटवर्क के माध्यम से फ़ाइल का उपयोग करना चाहते हैं और अगर आपके पास फ़ाइल स्थानीय रूप से है, तो NSURL के fileUrlWithPath का उपयोग करें!

+0

मैंने इस कोड को आजमाया है और जब मैं इसे इस तरह के सबव्यू में जोड़ता हूं तो मुझे केवल वीडियो दिखाई देता है: [self.view addSubview: _movieController.view]; लेकिन किसी कारण से, शीर्ष स्क्रबर स्टेटस बार से सामान्य से कुछ पिक्सेल नीचे नीचे है। क्या इसे सुधारने का कोई तरीका है? और मुझे इन त्रुटियों को इस प्रश्न में दिखाया गया है। http://stackoverflow.com/questions/12822420/ios-how-to-use-mpmovieplayercontroller मैं गलत क्या कर रहा हूं? – vnchopra

1

प्रयास करें जोड़ने

[player prepareToPlay]; 

के बाद

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url]; 

आप एप्पल दस्तावेज में MPMoviePlayerController के बारे में अधिक पढ़ सकते हैं: http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html#//apple_ref/doc/c_ref/MPMoviePlayerController

+3

यह एक टिप्पणी होनी चाहिए, जवाब नहीं। उन दस्तावेज़ों से जिन्हें आपने अभी लिंक किया है, लेकिन स्पष्ट रूप से नहीं पढ़ा है: "यदि कोई मूवी प्लेयर प्ले विधि को कॉल करते समय खेलने के लिए पहले से तैयार नहीं है, तो वह विधि स्वचालित रूप से इस विधि को कॉल करती है"। तो यह समस्या नहीं हो सकती है। समस्या यह है कि वर्तमान में कोरग्राफिक्स संदर्भ 'NULL' है जब ओपी प्लेबैक शुरू करने का प्रयास करता है। –

+0

आपके द्वारा पोस्ट किए गए दस्तावेज़ों में नमूने के साथ भी (शीर्ष पर अवलोकन भाग में कोड की कुछ पंक्तियां हैं जो मुझे लगता है कि यह काम करने के लिए न्यूनतम कोड होगा) यह काम नहीं करता है। –

1

इस प्रयास करें:

//Hello guise :- complete process here. 

//1. add framework in .h 
MediaPlayer/MediaPlayer.h 

//2.add delegate in @interface, MPMediaPickerControllerDelegate 

//[email protected] (retain, nonatomic) MPMoviePlayerViewController *moviePlayerController; 

//4.and synthesize in .m - @synthesize moviePlayerController; 

//5.IN - tableViewdelegateMethod 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath{  

    //given path for song 
    NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory1 = [paths1 objectAtIndex:0]; 
    NSString *strPath = [NSString stringWithFormat:@"%@/%@",documentsDirectory1,[movieArray objectAtIndex:indexPath.row]]; 
    NSLog(@"strPath %@",strPath); 
    //path for song. 
    //convert path in NSURL. 
    NSURL *videosURL = [NSURL fileURLWithPath:strPath]; 
    moviePlayerController = [[MPMoviePlayerViewController alloc]initWithContentURL:videosURL]; 
    [self presentMoviePlayerViewControllerAnimated:moviePlayerController]; 
    [moviePlayerController.moviePlayer play]; 
} 

//play song on UITableViewCell click. 
+0

erhm मूवी क्या है? – KennyVB

8

आप इस कोशिश के लिए है ......

NSString *path = [[NSBundle mainBundle]pathForResource:@"test" ofType:@"mp4"]; 
    player = [[MPMoviePlayerViewController alloc]initWithContentURL:[NSURL fileURLWithPath:path]]; 
    [player.view setFrame:CGRectMake(0, 0, 320, 320)]; 
    [self presentMoviePlayerViewControllerAnimated:player]; 
    [player.moviePlayer play]; 
    [self.view addSubview:player.view];