不是的MPMoviePlayerController播放任何视频内容[由于ARC和内存管理](MPM

2019-06-26 02:53发布

我试图让视频在iOS的applocation播放,使用的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),并尾矿的访问日志。 当单击播放按钮出现在一贯的黑色窗口。 Serverside集团我在日志中发现了两个新的条目:

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)"

所以手机获取的视频内容的部分,-apparently-准备在需要的时候得到休息。 是否有我错过了的MPMoviePlayerController一些明显的参数?


UPDATE:解决方案和工作代码

问题是由ARC和事实,到没有提及造成MPMoviePlayerController都不停地打电话的方法设置控制器之后。 将溶液:添加类变量的类,并使用此,以保持到所述控制器的参考的电影的寿命。

因此,在类的声明(任何消息/函数的定义外)早:

MPMoviePlayerController* mpController;

而abeformentioned 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];

Answer 1:

正如我的回答的MPMoviePlayerController播放视频完成之前结束 ,这看起来是一个内存管理(例如寿命)的问题。 假设您正在使用ARC编译时, player变量被释放时你playButtonClicked:方法返回。 在这一点上MPMoviePlayerController实例需要它的球拍和球,和回家。

尝试分配MPMoviePlayerController实例强烈的实例变量或属性。



Answer 2:

似乎没有任何明显不恰当给我。 这里有一些调试技巧,以帮助缩小问题:

  • 尝试使用一个URL的MP4文件通过HTTP ---这应该告诉你它是否是一个UI问题或资产的问题。
  • 尝试检查url的属性,如文件长度,并确认它完全匹配你的期望。


文章来源: MPMoviePlayerController not playing any video content [due to ARC and memory management]