为啥 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,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]