【问题标题】:Playing multimedia content in sequence依次播放多媒体内容
【发布时间】:2010-08-15 07:54:53
【问题描述】:

您好,我有一个 NSArray,其中包含许多我喜欢称之为“多媒体动作”的对象,这些对象封装了一些多媒体内容,例如电影和照片。我想按顺序“播放”它们,等待每个完成后再调用另一个。

在调用下一个操作之前管理每个操作的持续时间的最佳方法是什么?(对于照片,想象一个 UIAlertView 在延迟几秒钟后关闭,对于电影,想象一个 MPMoviePlayerController)

我已经调用了使用 NSOperation 扫描数组的方法。

重要提示:无论在 NSOperation 内部调用,MPMovieController 似乎都不会播放(界面甚至不会出现)。有其他人遇到过这个问题吗?

更新使用performSelectorOnMainThread: 可以让 MPMoviePlayer 按预期工作

【问题讨论】:

    标签: iphone cocoa-touch mpmovieplayercontroller nsoperation nsnotifications


    【解决方案1】:

    这是我设法找到的解决方案。如果有人感兴趣,我会发布它。

    首先,我将所有的“多媒体操作”放在NSOperationQueue 中,并将maxConcurrentOperationCount 设置为 1,因此我确信它们将从主线程异步运行,但在 FIFO 中一次只能运行一个顺序(您希望您的内容不会在屏幕上重叠,这一点非常重要)。

    然后对于每个动作,我会根据其类别/种类以特定方式激活它。假设有三种动作:

    1. UIAlertViews 子类
    2. MPMoviePlayerController 类
    3. 背景动作(不涉及多媒体内容的动作会立即出现在当前视图中

    对于前两个,我使用NSNotifications 来管理队列,因为我不知道内容何时会停止播放或将被用户关闭(假设通过触摸)。所以对于每一个我:

    • 使用setSuspended:YES 暂停队列执行
    • 为相应的 NSNotification 添加观察者
    • 播放内容
    • 他们玩完后发布通知
    • 移除观察者并使用setSuspended:NO再次启动队列

    对于 UIAlertView,通知发布时带有 performSelector:withObject:afterDelay:,说明应显示的时间量或双击后。而对于 MPMovieController,它会自动启动并命名为 MPMoviePlayerPlaybackDidFinishNotification。 UIAlertView 和 MP 类型都应该在主线程上播放。

    第三种可以是一组指令,简单地在放入队列的NSInvocationOperation中执行。所以我什至可以创建诸如“等待”之类的操作来暂停队列执行几秒钟

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2013-05-06
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多