2009-06-26 312 views
0

我正在使用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]; 
    } 

回答

1

我想通了。在调用第二个视频之前,我需要释放MediaPlayer。

代码示例:

- (void)onHitButton1 { 
    [mMoviePlayer release]; 
    mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[self movieURL]]; 
    mMoviePlayer.movieControlMode = MPMovieControlModeHidden; 
    [mMoviePlayer play]; 
} 
0

你真的要去其他视频?

我注意到3.0中的一个错误,如果你试图从同一个文件播放两次视频,你会得到一些奇怪的播放工件。上面的代码看起来像只有一个指向单个文件的URL。

我的解决方法是重命名我的文件,但这意味着您必须将其复制到文档目录以更改名称......也许您可以看到iPhone文件系统是否支持符号或硬链接回资源目录中的原始文件,以便为电影播放器​​提供不同的名称。

我在这个问题上提交了RADAR,你也应该。把一个超级简单的例子放在一起,显示什么是不工作。

+0

我正在更改movieURL中的URL。我将它改为Vid01,Vid02,Vid03等。对于不同的视频,声音是正确的,只是屏幕在播放时是黑色的。 – Matt 2009-06-26 20:12:37

1

你还应该注意的是,播放问题可能只发生在模拟器,而不是在手机上(如随后回放“闪蒸”或不显示图像)。

+0

我也注意到了。谢谢! – Matt 2009-07-01 00:54:30

0

不应该在资源路径之前更改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]; 

就好像你正在写比你需要的更多。