为啥 MPMoviePlayerController 能在模拟器中工作,而不能在设备中工作?
Posted
技术标签:
【中文标题】为啥 MPMoviePlayerController 能在模拟器中工作,而不能在设备中工作?【英文标题】:Why does MPMoviePlayerController work in the simulator, but not the device?为什么 MPMoviePlayerController 能在模拟器中工作,而不能在设备中工作? 【发布时间】:2010-08-11 18:57:09 【问题描述】:我无法让 MPMoviePlayerController 在设备上运行。它在模拟器中运行良好,播放一个 5 秒的视频,然后将适当的回调 (myMovieFinishedCallback:
) 发送到视图控制器。当它在设备上运行时,电影永远不会出现,即使我可以毫无问题地追踪 [player play]
。 myMovieFinishedCallback:
永远不会被调用,并且没有错误。所有正确的资源都被复制了。知道发生了什么吗?
这是我用来创建和使用播放器的代码,
更新:我已切换到使用 MPMoviePlayerViewController。在设备上电影仍然无法播放,我只是无限期地获得旋转的进度轮。即使我将播放器设置为 MPMovieControlStyleNone,控件也会短暂闪烁 - 有人知道我该如何解决这个问题吗?如果这有什么不同的话,这部电影是 5 秒,大约 1.5 MB。
更新:其他电影文件可以工作,但我不知道如何使我的工作。我已经将其作为 .mov 和 .mp4 进行了尝试,并且设置似乎是正确的。知道什么会导致 MPMoviePlayer 仅在设备上永久显示进度轮吗?
- (void) playMovie
NSString *url = [[NSBundle mainBundle]
pathForResource:@"myMovie"
ofType:@"mp4"];
MPMoviePlayerViewController *playerViewController =
[[MPMoviePlayerViewController alloc]
initWithContentURL:[NSURL fileURLWithPath:url]];
playerViewController.moviePlayer.controlStyle = MPMovieControlStyleNone;
playerViewController.moviePlayer.scalingMode = MPMovieScalingModeFill;
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(myMovieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:[playerViewController moviePlayer]];
playerViewController.view.frame = movieView.frame;
[movieView addSubview:playerViewController.view];
//---play movie---
MPMoviePlayerController *player = [playerViewController moviePlayer];
[player play];
【问题讨论】:
使用 MPMoviePlayerViewController 我切换到 MPMoviePlayerViewController。还是没有运气。 【参考方案1】:你的代码对我来说很好用,所以我想到了两种可能性(可能还有其他):
-
您的 movieView 未正确初始化或未将其框架设置为可见。
设备不支持您正在显示的视频的视频格式。
我会尝试使用不同的视频。也许你可以确认你以前在设备上玩过。这是我拼凑的小演示项目:http://www.cimgf.com/files/PlayMovie.zip
【讨论】:
这是一个很大的帮助 - 您的过山车视频作品。我试过弄乱我正在使用的视频的设置,但仍然没有运气。有没有人遇到过 MPMoviePlayer 的类似问题? 我建议您开始一个新问题,询问有关格式和 MPMoviePlayer 的问题。这个问题的标题不一定会引起了解格式的人的注意。又一想。如果您使用的是 ios 4,您是否尝试过使用 AVFoundation 类。 AVPlayer 和 AVPlayerLayer 允许您在核心动画层中显示视频。 我不在 iOS 4 中,因为我们在 iPad 上。我能问一下你是怎么拍那部过山车电影的吗?我们尝试了各种不同的转换器,但仍然没有成功。 这实际上是 Apple 曾经在新的 OS X 安装中包含的一部电影。我在版本升级之间复制了它只是为了测试目的。我对此一无所知。如果您在 QuickTime Player 中打开它,您可以在视频文件上“获取信息”以查看有关它的某些详细信息。 实际上只是注意到它仍然存在。查看 /System/Library/Compositions,您会看到几个相同格式的 .mov 文件。以上是关于为啥 MPMoviePlayerController 能在模拟器中工作,而不能在设备中工作?的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 glTranslatef?为啥不直接更改渲染坐标?
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?