iPhone Dev:MediaPlayer在后续播放中不播放视频(仅音频)
问题描述:
我正在使用MediaPlayer播放几个不同视频的iPhone应用程序。它对第一个视频非常有用,但是当我尝试播放另一个视频时,屏幕保持黑屏,只有音频播放。有谁知道为什么会发生这种情况?iPhone Dev:MediaPlayer在后续播放中不播放视频(仅音频)
这里是我的代码:
-(NSURL *)movieURL
{
NSBundle *bundle = [NSBundle mainBundle];
if (bundle)
{
NSString *moviePath = [bundle pathForResource:vidName ofType:@"mov"];
if (moviePath)
mMovieURL = [NSURL fileURLWithPath:moviePath];
if (vidName == @"Vid01")
vidName = @"Vid02";
else if (vidName == @"Vid02")
vidName = @"Vid03";
}
return mMovieURL;
}
- (void)onHitButton1 {
mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[self movieURL]];
mMoviePlayer.movieControlMode = MPMovieControlModeHidden;
[mMoviePlayer play];
}
答
我想通了。在调用第二个视频之前,我需要释放MediaPlayer。
代码示例:
- (void)onHitButton1 {
[mMoviePlayer release];
mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[self movieURL]];
mMoviePlayer.movieControlMode = MPMovieControlModeHidden;
[mMoviePlayer play];
}
答
你真的要去其他视频?
我注意到3.0中的一个错误,如果你试图从同一个文件播放两次视频,你会得到一些奇怪的播放工件。上面的代码看起来像只有一个指向单个文件的URL。
我的解决方法是重命名我的文件,但这意味着您必须将其复制到文档目录以更改名称......也许您可以看到iPhone文件系统是否支持符号或硬链接回资源目录中的原始文件,以便为电影播放器提供不同的名称。
我在这个问题上提交了RADAR,你也应该。把一个超级简单的例子放在一起,显示什么是不工作。
答
不应该在资源路径之前更改vidname而不是之后?
无论采用哪种方式,最好将其编写为接受可传递文件名的NSString。你知道像
-(NSURL *)movieURLForVideo: (NSString) videoFileName
? 另外我不喜欢你缺乏{}的。这使我更容易阅读/调试。一般来说,这是一个好习惯。花些额外的时间将事情写得尽可能清晰,以后可以节省您的麻烦。
-(NSURL *)movieURL
{
NSBundle *bundle = [NSBundle mainBundle];
if (bundle)
{
if (vidName == @"Vid01")
{
vidName = @"Vid02";
}
else if (vidName == @"Vid02")
{
vidName = @"Vid03";
}
else if (vidName == @"Vid03")
{
vidName = @"Vid01";
}
NSString *moviePath = [bundle pathForResource:vidName ofType:@"mov"];
if (moviePath)
{
mMovieURL = [NSURL fileURLWithPath:moviePath];
}
}
return mMovieURL;
}
是否将vidName设置为某处的Vid01?我没有看到它,所以我不得不问。这一般只是令人困惑。我已经写了OS X,所以我不知道是否有任何差异,但我用这个当我加载在我当前的项目地图:
NSString* mapPath = [[NSBundle mainBundle] pathForResource:mapFileName ofType:mapFileType];
NSURL* mapURL = [NSURL fileURLWithPath: mapPath];
currentMap_ = [[Map alloc] initWithContentsOfURL: mapURL];
就好像你正在写比你需要的更多。
我正在更改movieURL中的URL。我将它改为Vid01,Vid02,Vid03等。对于不同的视频,声音是正确的,只是屏幕在播放时是黑色的。 – Matt 2009-06-26 20:12:37