Ios AVQueuePlayer回放到项目开头时的通知

Ios AVQueuePlayer回放到项目开头时的通知,ios,Ios,我的AVQueuePlayer中有5个AVPlayerItems,设置为AVPlayerActionAtItemEndAdvance。我在UI上点击play,播放第一个、第二个,然后开始播放第三个。然后我按了倒带键。我想要发生的是第三个视频倒回开始,然后我得到一个允许我停止的通知。我看到的是,第四个项目的状态为“准备好玩”,然后当前项目更改为第四个项目,然后第四个项目开始玩 为什么第三个项目重新开始后,第四个项目成为当前项目 只有这样,我才能停止此操作,将播放机设置为不自动前进(AVPlayer

我的
AVQueuePlayer
中有5个
AVPlayerItems
,设置为
AVPlayerActionAtItemEndAdvance
。我在UI上点击play,播放第一个、第二个,然后开始播放第三个。然后我按了倒带键。我想要发生的是第三个视频倒回开始,然后我得到一个允许我停止的通知。我看到的是,第四个项目的状态为“准备好玩”,然后当前项目更改为第四个项目,然后第四个项目开始玩

为什么第三个项目重新开始后,第四个项目成为当前项目


只有这样,我才能停止此操作,将播放机设置为不自动前进(
AVPlayerActionAtItemEndPause
),观察每个项目的结束,并希望收到第三个项目倒带以及自然播放结束时的“播放结束”通知。然后在我的end observer代码中,我可以检查播放器的速率,如果倒带,则不前进到下一个项目。

我处理这一问题的方法是在开始搜索代码中,将
actionAtItemEnd
设置为
AVPlayerActionAtItemEndNone
,然后在搜索结束时将其重置回
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;
        }
    }
}
-(iAction)快速倒带:(id)发送方
{
UIGestureRecognitor*记录=(UIGestureRecognitor*)发送方;
if(recog.state==UIgestureRecognitizerStateStart){
如果(_player.rate==1){
NSLog(@“快退开始\n%@”,发送方);
_player.actionAtItemEnd=AVPlayerActionAtItemEndNone;
_player.rate=-2;
}
}else if(recog.state!=UIgestureRecognitizerStateChanged){
//结束/取消
NSLog(@“快退结束\n%@”,发送方);
如果(_.rate<0){
_player.rate=0;
如果(CMTimeGetSeconds(_player.currentTime)<0){
[_playerseektotime:CMTimeMake(0,1)];
}
_player.actionAtItemEnd=AVPlayerActionAtItemEndAdvance;
_player.rate=1;
}
}
}

如果搜索持续时间较长,您可能希望加快搜索速度。

我的处理方法是在开始搜索代码中,将
actionAtItemEnd
设置为
AVPlayerActionAtItemEndNone
,然后在搜索结束时将其重置为
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;
        }
    }
}
-(iAction)快速倒带:(id)发送方
{
UIGestureRecognitor*记录=(UIGestureRecognitor*)发送方;
if(recog.state==UIgestureRecognitizerStateStart){
如果(_player.rate==1){
NSLog(@“快退开始\n%@”,发送方);
_player.actionAtItemEnd=AVPlayerActionAtItemEndNone;
_player.rate=-2;
}
}else if(recog.state!=UIgestureRecognitizerStateChanged){
//结束/取消
NSLog(@“快退结束\n%@”,发送方);
如果(_.rate<0){
_player.rate=0;
如果(CMTimeGetSeconds(_player.currentTime)<0){
[_playerseektotime:CMTimeMake(0,1)];
}
_player.actionAtItemEnd=AVPlayerActionAtItemEndAdvance;
_player.rate=1;
}
}
}
如果搜索时间较长,则可能希望加快搜索速度