2010-11-26 65 views
5

我目前正在使用AVPlayer和AVPlayerLayer来播放一些视频。在播放视频时,我在视频中每隔30秒注册一次时间更新。这用于绘制视频中该点处加速度的图形,并与视频一起更新。该图正在使用视频中的CMTime,因此,如果我跳到视频的其他部分,该图就会立即表示视频中的该时间点,而无需额外的工作。AVPlayerLayer - 重新编程车轮?

任何人,据我所知,如果我想获得类似于MediaPlayer框架提供的界面,我将不得不自己这样做。

我想知道的是,有没有办法使用我的AVPlayer与MediaPlayer框架? (不是我能看到的。)或者,有没有办法通过MediaPlayer框架注册增量时间更新。

我的代码,如果有人有兴趣,如下:

[moviePlayer addPeriodicTimeObserverForInterval: CMTimeMake(1, 30) queue: dispatch_queue_create("eventQueue", NULL) usingBlock: ^(CMTime time) { 
loopCount = (int)(CMTimeGetSeconds(time) * 30); 
if(loopCount < [dataPointArray count]) { 
    dispatch_sync(dispatch_get_main_queue(), ^{ 
    [graphLayer setNeedsDisplay]; 
    }); 
} 
}]; 

谢谢!

回答

0

如果你正在谈论MPMoviePlayer显示的窗口镶边,那么恐怕你正在考虑自己创建这个UI。

AFAIK没有办法通过MediaPlayer框架实现您需要的计时行为,这非常简单,就是“播放某些媒体”框架。你使用AVFoundation做正确的事情。

这使您需要自己创建UI。我的建议是从一个XIB文件开始创建总体布局;顶部带有完成按钮的工具栏,一个代表自定义回放视图的大视图(使用AVPlayerLayer)和一个单独的视图来包含您的控件。

如果要模拟MPMoviePlayer UI,您需要编写一些自定义控制器代码以根据需要自动显示/隐藏播放控件和工具栏。

+0

Woa。这个答案比问题晚了近一年,并且仍然被接受了!布拉沃。 – Almo 2012-05-15 17:37:12

0

您可能想要寻找AVSynchronizedLayer类。我认为官方编程指南中没有太多内容。你可以在这里和那里找到一些信息:subfurtherOtter Software

在O'Really编程的iOS 4(或5)中,还有一个关于如何让一个方形移动/停止与动画同步的简短参考。 在WWDC 2011会议Working with Media in AV Foundation期间展示了另一个演示(不是很多代码)。