MPMoviePlayerController 音频/视频不同步

Posted

技术标签:

【中文标题】MPMoviePlayerController 音频/视频不同步【英文标题】:MPMoviePlayerController audio/video out of sync 【发布时间】:2012-09-21 22:03:02 【问题描述】:

在我的 iPad 应用程序中,我创建了一个 MPMoviePlayerController 来播放网站上的 MP4。 MP4里有人在说话。在应用程序中,我注意到音频和视频可能有半秒或四分之一秒的不同步。 (我可以这么说,因为我在网络浏览器中观看视频并且没有延迟。)

我对此唯一的线索是,当 MPMoviePlayerController 首次加载时,音频开始播放,但视频没有 - 然后视频开始播放,它似乎跳过了几帧以“捕捉up”到音频...但它并不完全同步。

看到这个类在Apple Documentation 中是一个“黑匣子”,而现有的方法或属性都没有对这个问题有帮助,我有点难过。我可能不得不让它保持轻微的滞后状态,而不是面对奇怪的解决方法。我想看看是否有人以前经历过这种情况或可以提出解决方案。

我在 Mountain Lion、最新 XCode、iPad 2 和 ios 6 上运行。

我用来生成控制器的代码是:

-(void) startVideoPlaying

if (!self.theMoviePlayer) 
    self.theMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: movieURL];
    [self.bgView addSubview: self.theMoviePlayer.view];
    [self.theMoviePlayer.view setFrame: movieContainer.frame]; // player's frame must match parent's
 else 
    [self.theMoviePlayer setContentURL:movieURL];

    self.theMoviePlayer.shouldAutoplay = YES;
    [self.theMoviePlayer play];

感谢您的帮助。

【问题讨论】:

【参考方案1】:

经过各种测试,我必须得出结论,我一直在播放的 MP4 上的编码有问题。我不是视频编解码专家,但我做了以下测试,告诉我:

1) 下载 MP4,将其放入应用程序并通过文件 URL 将其加载到 MPMoviePlayerController。音频仍然不同步,所以不是连接问题。

2) 在网络上找到另一个 MP4(来自 Vimeo 的东西)并将其流式传输到播放器中。音频同步正确,我尝试播放的 MP4 可能有问题。

3) 下载 MP4,并使用 Handbrake 将其转换为具有各种不同设置(包括 iPad 预设)的 M4V。音频同步良好。

基于此,在我看来,我尝试播放的文件而不是播放器有问题(或者播放器无法处理它)。不幸的是,我尝试播放的文件不能简单地转换,它们是大型网站系统的一部分,必须更改数百个文件,等等。所以,虽然我已经回答了自己的问题,但我还没有解决问题。

【讨论】:

以上是关于MPMoviePlayerController 音频/视频不同步的主要内容,如果未能解决你的问题,请参考以下文章

MPMoviePlayerController 不播放 .wmv

如何显示 MPMoviePlayerController 控件?

MPMoviePlayerController 隐藏 AirPlay 按钮

MPMoviePlayerController 上的专辑封面

MPMoviePlayerController 已弃用,现在怎么办?

用 MPMoviePlayerController 替换 AVPlayer