AVFoundation播放视频实现自动跳过片头片尾

1.跳过片头:

KVO监听AVPlayerItem的status,当状态为AVPlayerItemStatusReadyToPlay时,seek到片头结束。

NSURL*url = ;

AVAsset*asset = [AVAsset assetWithURL:url];

AVPlayerItem*playItem = [AVPlayerItem playerItemWithAsset:asset];

[playItem addObserver:self forKeyPath:@"status"options:0context:nil];

- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{

if([keyPath isEqualToString:@"status"]) {

AVPlayerItem*playItem = object;

if(playItem.status==AVPlayerItemStatusReadyToPlay){

CMTime time ;//片头结束时的时间

[self.player seekToTime:time];

[playItem removeObserver:selfforKeyPath:@"status"];//移除监听

}

}

}


2.跳过片尾

跳过片尾需要用到AVPlayer的一个边界时间监听的方法:

-(id)addBoundaryTimeObserverForTimes:(NSArray *)times queue:(nullable dispatch_queue_t)queue usingBlock:(void(^)(void))block;

对这个方法传递一个时间数组,player会在播放到指定时间后回调这个block。

有三个参数:

times :一个由CMTime组成的时间数组,用于标记边界时间。

queue : 监听的调度队列,设为空时为默认为主队列。

block :监听的回调代码块。block中没有明确是哪个时间的调用,需要自己计算。

CMTime time ;//正片结束时间

NSValue timeValue = [NSValue valueWithCMTime:time];

[self.player addBoundaryTimeObserverForTimes:@[timeValue]queue:nil usingBlock:^{

//执行相应操作,如果是使用的AVQueuePlayer,直接播放下一个资源

[seakSelf.player advanceToNextItem];

}];

}

你可能感兴趣的:(AVFoundation播放视频实现自动跳过片头片尾)