ios - AVQueuePlayer 回退到项目开头时的通知

标签 ios

我有 5 AVPlayerItems在我的AVQueuePlayer ,设置为 AVPlayerActionAtItemEndAdvance .我在我的 UI 上点击播放,播放第一个,第二个,然后开始播放第三个。然后我按下倒带按钮。我想要发生的是第三个视频倒回到它的开头,然后我收到一个允许我停止的通知。我看到的是我的状态为准备好播放第 4 个项目,然后是当前项目更改为第 4 个项目 - 然后第 4 个项目播放。

为什么第 3 项倒回到起点后第 4 项变为当前项

是我可以阻止它以将播放器设置为不自动前进( AVPlayerActionAtItemEndPause )的唯一方法,观察每个项目的结尾,并希望我收到关于倒带第三个项目的“播放结束”通知以及当它自然地播放到结尾时。然后在我的最终观察者代码中,我可以检查播放器的速率,如果倒带,则不前进到下一个项目。

最佳答案

我处理这个问题的方法是在开始寻找代码中,设置 actionAtItemEndAVPlayerActionAtItemEndNone ,然后将其重置回 AVPlayerActionAtItemEndAdvance当寻求结束时。在 iOS6 上,似乎可以在轨道的开头进行搜索。在“结束搜索”代码中,我在开始正常播放之前重置了速率和当前时间。

以下方法由长按手势识别器调用。

- (IBAction)fastRewind:(id)sender
{
    UIGestureRecognizer *recog = (UIGestureRecognizer*)sender;
    if (recog.state == UIGestureRecognizerStateBegan) {
        if (_player.rate == 1) {
            NSLog(@"fastRewind begin\n%@", sender);
            _player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
            _player.rate = -2;
        }
    } else if (recog.state != UIGestureRecognizerStateChanged) {
        // Ended/Canceled
        NSLog(@"fastRewind end\n%@", sender);
        if (_player.rate < 0) {
            _player.rate = 0;
            if (CMTimeGetSeconds(_player.currentTime) < 0) {
                [_player seekToTime:CMTimeMake(0, 1)];
            }
            _player.actionAtItemEnd = AVPlayerActionAtItemEndAdvance;
            _player.rate = 1;
        }
    }
}

如果保持较长时间,人们可能希望加快搜索速度。

关于ios - AVQueuePlayer 回退到项目开头时的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7282360/

相关文章:

ios - 如何创建更小的迷你相机 View ,如 Tumblr iPhone 应用程序图像选择器

ios - UITableView/UICollectionView 上的 UIRefreshControl 大小错误

android - 在 iOS/Android 中运行 node.js

ios - 具有自动布局的 UIScrollview

ios - iOS在后台使用多个对象执行任务

ios - 基于 UIView block 的动画怪异行为

javascript - 构建 phonegap/cordova iOS p2p 视频聊天

ios - swift : UIPanGestureRecognizer delegate method not called

ios - UIActivityIndi​​catorView 在 Swift 中返回页面时不会消失

ios - 在屏幕的一半处对自定义 View 进行动画处理,其中包含图像 - 突然的动画