在使用AVPlayer处理HLS流时,由于segment需要网络下载和解码,所以快进时会出现短暂的延迟。这种延迟可能会导致currentTime与实际显示的帧不匹配。
为了解决这个问题,可以在AVPlayer的seek操作中使用AVPlayerItem的“preferredForwardBufferDuration”属性来设定预先缓存的时长。这个值可以根据需求调整,但在iOS14以下版本,由于系统设计存在问题,缓存时间过长可能会导致播放器出现卡顿甚至崩溃的问题。
以下是代码示例:
// 设置AVPlayerItem的preferredForwardBufferDuration属性 AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"your HLS stream url"]]; [playerItem setPreferredForwardBufferDuration:7]; // 设置7秒缓存
// 初始化AVPlayer AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
// 进行快进/快退操作 [player seekToTime:CMTimeMakeWithSeconds(seek_time, NSEC_PER_SEC)]; // seek_time 为想要快进/快退到的时间点,秒为单位