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];

}];

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容