1.跳過片頭:
KVO監(jiān)聽AVPlayerItem的status,當狀態(tài)為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"];//移除監(jiān)聽
}
}
}
2.跳過片尾
跳過片尾需要用到AVPlayer的一個邊界時間監(jiān)聽的方法:
-(id)addBoundaryTimeObserverForTimes:(NSArray *)times queue:(nullable dispatch_queue_t)queue usingBlock:(void(^)(void))block;
對這個方法傳遞一個時間數(shù)組谒麦,player會在播放到指定時間后回調這個block。
有三個參數(shù):
times :一個由CMTime組成的時間數(shù)組疙挺,用于標記邊界時間。
queue : 監(jiān)聽的調度隊列剑鞍,設為空時為默認為主隊列。
block :監(jiān)聽的回調代碼塊爽醋。block中沒有明確是哪個時間的調用蚁署,需要自己計算。
CMTime time ;//正片結束時間
NSValue timeValue = [NSValue valueWithCMTime:time];
[self.player addBoundaryTimeObserverForTimes:@[timeValue]queue:nil usingBlock:^{
//執(zhí)行相應操作蚂四,如果是使用的AVQueuePlayer光戈,直接播放下一個資源
[seakSelf.player advanceToNextItem];
}];
}