我正在尝试在 iOS 应用程序中播放视频,当用户按下按钮时,使用 MPMoviePlayerController 将电影视图附加到现有视图。该视图在正确的位置和所有内容上显示为一个黑框,但没有任何反应。我期待电影开始播放,但没有任何反应,应用程序也没有提示原因。
谁能看到这哪里出错了?
-(IBAction) playButtonClicked:(id)sender
{
NSString* path = [[NSBundle mainBundle] pathForResource:@"sample_mpeg4" ofType:@"mp4"];
NSLog(@"Using videoPath %@", path);
NSURL* url = [NSURL fileURLWithPath:path];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
[self.view addSubview:player.view];
player.view.frame = CGRectMake(10, 10, 300, 220);
[player play];
}
电影存在并记录了正确的路径,但仍然没有电影播放。
2012-07-06 11:51:13.492 experiments[84702:12203] Using videoPath /Users/marius/Library/Application Support/iPhone Simulator/5.1/Applications/9799C851-8D2B-4CFE-8CFA-A4C4C954787F/experiments.app/sample_mpeg4.mp4
根据我的阅读和理解,这应该是可行的。关于尝试什么的任何提示或建议?
我将电影移至 HTTP 服务器 (fg.mp4) 并跟踪访问日志。单击播放按钮时,会出现通常的黑色窗口。服务器端我在日志中发现了两个新条目:
168.122.x.x - - [06/Jul/2012:22:42:33 +0200] "GET /fg.mp4 HTTP/1.1" 304 192 "-" "AppleCoreMedia/1.0.0.9B176 (iPhone Simulator; U; CPU OS 5_1 like Mac OS X; en_us)"
168.122.x.x - - [06/Jul/2012:22:42:33 +0200] "GET /fg.mp4 HTTP/1.1" 206 33304 "-" "AppleCoreMedia/1.0.0.9B176 (iPhone Simulator; U; CPU OS 5_1 like Mac OS X; en_us)"
因此,手机获取了部分电影内容,并且——显然——准备在需要时获取其余部分。我缺少的 MPMoviePlayerController 是否有一些明显的参数?
更新:解决方案和工作代码
该问题是由 ARC 引起的,并且MPMoviePlayerController
在调用设置控制器的方法后没有保留对 的引用。解决方案:向类添加一个类变量,并使用它在电影的生命周期内保持对控制器的引用。
在类声明的早期(在任何消息/函数定义之外):
MPMoviePlayerController* mpController;
并且前面提到的playButtonClicked
使用这个变量来跟踪控制器:
NSString* path = [[NSBundle mainBundle] pathForResource:@"sample_mpeg4" ofType:@"mp4"];
NSURL* url = [NSURL fileURLWithPath:path];
mpController = [[MPMoviePlayerController alloc] initWithContentURL:url];
mpController.view.frame = CGRectMake(10, 10, 300, 220);
[self.view addSubview:mpController.view];
[mpController play];