AVPlayerLayer - 重新编程轮子?

Mat*_*gan 5 video cocoa-touch objective-c avfoundation media-player

我目前正在使用AVPlayer和AVPlayerLayer播放一些视频.在播放视频时,我在视频播放期间每隔30秒注册一次时间更新.这用于绘制视频中该点的加速度图表,并将其与视频一起更新.该图表使用了视频中的CMTime,因此,如果我跳到视频的不同部分,图表会立即表示视频中的该时间点,而无需额外的工作.

据我所知,如果我想获得类似于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];
  });
 }
}];
Run Code Online (Sandbox Code Playgroud)

谢谢!

Luk*_*ath 0

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

AFAIK 无法使用 MediaPlayer 框架实现您需要的计时行为,它是一个非常简单的“播放一些媒体”框架。使用 AVFoundation 您正在做正确的事情。

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

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