微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

objective-c – MPMoviePlayerController不播放任何视频内容[由于ARC和内存管理]

我正在尝试在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)并拖尾访问日志.
单击播放按钮时,会出现通常的黑色窗口.
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)"

因此,手机可以获取部分电影内容,并且 – 显然 – 准备在需要时完成其余部分.
我错过了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,220);
[self.view addSubview:mpController.view];
[mpController play];

解决方法

与我对 MPMoviePlayerController playback terminates before video finishes的回答一样,这看起来像是内存管理(实例生命周期)问题.假设您正在使用ARC进行编译,那么当您的playButtonClicked:方法返回时,播放器变量将被释放.此时,MPMoviePlayerController实例接受其蝙蝠和球,然后回家.

尝试将MPMoviePlayerController实例分配给强实例变量或属性.

原文地址:https://www.jb51.cc/c/116633.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐