2010-11-29 14 views
11

हर एक। मैं MPMoviePlayerController का उपयोग कर लाइव स्ट्रीम कैसे खेलना है, यह जानने का प्रयास कर रहा हूं। परीक्षण के लिए मैं एप्पल टेस्ट स्ट्रीम नमूना http://devimages.apple.com/iphone/samples/bipbopall.html का उपयोग कर रहा हूं। यह UIWebView में पूरी तरह से काम कर रहा है, लेकिन मैं इसे MPMoviePlayerController के साथ काम नहीं कर सकता।MPMoviePlayerController और HTTP लाइव स्ट्रीमिंग

NSURL *mediaURL = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbopall.html"]; 
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:mediaURL]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlayBackDidFinish:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:nil]; 

[mp setControlStyle:MPMovieControlStyleFullscreen]; 
[mp setMovieSourceType:MPMovieSourceTypeStreaming]; 
[mp setFullscreen:YES]; 

[self.view addSubview:[mp view]]; 

[mp prepareToPlay]; 
[mp play]; 

वास्तव में कुछ भी खेलने के बिना नियंत्रक प्राप्त करता MPMoviePlayerPlaybackDidFinishNotification: वहाँ कोड के अपने टुकड़ा है। समस्या कहाँ हे?

+0

"*** समाप्त अनुप्रयोग, कारण: 'कोई AVPlayerItem AVPlayer के एक से अधिक उदाहरण के साथ जुड़े नहीं किया जा सकता '' – openfrog

उत्तर

17

में object:mp बजाय object:nil प्रयास करें आपकी समस्या शायद यूआरएल के साथ है। MPMoviePlayerController यूआरएल सीधे उस फाइल को चाहता है जिसे आप खेलना चाहते हैं। आप HTML पृष्ठ के लिए यूआरएल प्रदान कर रहे हैं जो मूवी प्लेयर समझ में नहीं आता है। यही कारण है कि यह UIWebView में काम करता है क्योंकि एक वेब ब्राउज़र HTML समझता है। आप क्या गलत है के बारे में अधिक जानकारी चाहते हैं आप निम्नलिखित, एप्पल के प्रलेखन से उद्धृत कर त्रुटि देख सकते हैं:

MPMoviePlayerContentPreloadDidFinishNotification या MPMoviePlayerPlaybackDidFinishNotification सूचनाओं के लिए यूआरएल लदान में त्रुटियों की जांच करने, रजिस्टर। त्रुटि पर, इन अधिसूचनाओं में अधिसूचना उपयोगकर्ता उपयोगकर्ता शब्दकोश में @ "त्रुटि" कुंजी का उपयोग करके एक NSError ऑब्जेक्ट उपलब्ध है।

यह कुछ ऐसा दिखाई देगा:

- (void) moviePlayBackDidFinish:(NSNotification*)notification { 
    NSError *error = [[notification userInfo] objectForKey:@"error"]; 
    if (error) { 
     NSLog(@"Did finish with error: %@", error); 
    } 
} 

आप कोशिश करते हैं और है कि नमूने तुम कोशिश कर सकते खेलते हैं और धारा सीधे है, जो होगा के लिए URL पर पहुंचना चाहते हैं: http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

+0

बहुत बहुत धन्यवाद - यूआरएल असली समस्या थी। एक और सवाल: MPMoviePlayerController - क्या यह लाइव ऑडियो स्ट्रीम (जैसे इंटरनेट रेडियो) खेलने का सही विकल्प है? मैंने HTTP लाइव स्ट्रीमिंग को लागू करने के तरीकों की खोज की और निष्कर्ष निकाला कि मूवीप्लेयर मुझे जिस चीज की आवश्यकता थी। – Andrew

+0

आपका स्वागत है। मैंने स्वयं स्ट्रीमिंग नहीं की है इसलिए मैं इस बात पर टिप्पणी नहीं कर सकता कि कौन सा दृष्टिकोण सबसे अच्छा है। –

5

आप सूची फ़ाइल खेलने के लिए सीधा लिंक का उपयोग करना चाहिए: न आया हुआ अपवाद 'NSInvalidArgumentException' की वजह से http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

NSURL *mediaURL = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]; 
MPMoviePlayerController *mediaPlayer = [[MPMoviePlayerController alloc] initWithContentURL:mediaURL]; 
संबंधित मुद्दे