Jacky Shin:NSURL *mediaFileUrl = [NSURL URLWithString:urlStr];
NSString *moviePath = [[NSBundlemainBundle] pathForResource:@"head"ofType:@"mov"];
NSURL *localURL = [[NSURL alloc] initWithString:moviePath];
NSURL *localURL1 = [NSURL URLWithString:moviePath];
NSURL *localURL2 = [NSURL fileURLWithPath:moviePath];
NSLog(@"localURL=%@, localURL1=%@, localURL2=%@", localURL,localURL1, localURL2);
輸出為:
2012-12-25 15:26:57.342 MMPl[4174:907]
localURL =/var/mobile/Applications/B89AE103-A5BF-4EFA-B3AE-B3D40DA00BD2/MMPl.app/head.mov, localURL1=/var/mobile/Applications/B89AE103-A5BF-4EFA-B3AE-B3D40DA00BD2/MMPl.app/head.mov,
localURL2=file://localhost/var/mobile/Applications/B89AE103-A5BF-4EFA-B3AE-B3D40DA00BD2/MMPl.app/head.mov
實驗證明,
1. 如果是播放本地檔案,採用上面的localURL和localURL1都會出現播放不正常。會出現播放的頁面一閃然後像是播放完畢,自動退回去了。而使用localURL2卻能正常播放。(ipad2 ios6上測試)
2. 如果是播放網路檔案,如蘋果官方例子MoviePlayer中使用如下代碼:
NSURL *theMovieURL = [NSURL
URLWithString:self.movieURLTextField.text];
是使用的URLWithString的方式,換成initWithString也可以正常播放,但換成fileURLWithPath,則會失敗。
下面部分來自網上。
範例程式碼:
NSString *urlStr = @"http://videourl.com";
NSURL *mediaFileUrl = [NSURL URLWithString:urlStr];
MPMoviewPlayerViewController *playerVC =
[[[MPMoviePlayerViewController alloc] initWithContentURL:mediaFileUrl] autorelease];
[self presentModalViewController:playerVC animated:YES];
[[playerVC moviePlayer] play];
需要注意的是,使用本地媒體檔案時,利用來進行執行個體化時,iOS4.X系列可以正常播放,但是到了iOS5.X時,
就必須使用下面的method來執行個體化,否則媒體檔案不能正常播放。(本人親測,確如所言,否則,則看不到player.view在介面上)
NSURL *mediaFileUrl = [[NSURL alloc] initFileURLWithPath:filePath];
另外,可以利用NSNotificationCenter來擷取媒體檔案播放相關的各種事件。
例如:
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.playerVC.moviePlayer];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mediaFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.playerVC.moviePlayer];
更多的Observer請參考Apple的文檔