【问题标题】:AVPlayerLayer - ReProgramming the Wheel?AVPlayerLayer - 重新编程轮子?
【发布时间】:2010-11-26 20:18:16
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: objective-c cocoa-touch video media-player avfoundation


    【解决方案1】:

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

    AFAIK 无法使用 MediaPlayer 框架实现所需的计时行为,这是一个非常简单的“播放某些媒体”框架。使用 AVFoundation 是对的。

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

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

    【讨论】:

    • 哇。这个答案比问题晚了将近一年,但仍然被接受!太棒了。
    【解决方案2】:

    您可以使用https://bitbucket.org/brentsimmons/ngmovieplayer 作为起点(如果它在您询问时存在)。

    来自项目页面:“复制 MPMoviePlayerViewController 的大部分行为——但使用 AVFoundation。”

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-09-19
        • 1970-01-01
        • 2022-01-10
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多