Cocoa AVPlayer通过多个视频文件实现无间隙播放和搜索

Cocoa AVPlayer通过多个视频文件实现无间隙播放和搜索,cocoa,avfoundation,avplayer,Cocoa,Avfoundation,Avplayer,我目前正在编写一个小应用程序,它获取一个包含许多短视频文件(每个约1mn)的文件夹,并像播放一个长视频文件一样播放它们 我一直在使用AVQueuePlayer一个接一个地播放它们,但我想知道是否有替代方法,因为我遇到了一些问题: 当播放器切换到下一个文件时,有一个很小但明显的间隙 如果不删除队列中的所有项目并将其放回,我无法返回到上一个视频文件 我希望能够转到视频中的任何一点,就像它是一个单一的视频文件一样。AVPlayer是解决这一问题的最佳方法吗?我意识到这一问题提出已经有6年了,但在看

我目前正在编写一个小应用程序,它获取一个包含许多短视频文件(每个约1mn)的文件夹,并像播放一个长视频文件一样播放它们

我一直在使用AVQueuePlayer一个接一个地播放它们,但我想知道是否有替代方法,因为我遇到了一些问题:

  • 当播放器切换到下一个文件时,有一个很小但明显的间隙
  • 如果不删除队列中的所有项目并将其放回,我无法返回到上一个视频文件

我希望能够转到视频中的任何一点,就像它是一个单一的视频文件一样。AVPlayer是解决这一问题的最佳方法吗?

我意识到这一问题提出已经有6年了,但在看到这个问题后不久,我就找到了一个解决方案,也许它会对其他人有所帮助

我没有使用
AVQueuePlayer
,而是将剪辑组合在
AVMutableComposition
(AVAsset的子类)中,然后可以在普通的
AVPlayer
中播放

let assets:[AVAsset]=urlsOfVideos.map(AVAsset.init)
let composition=AVMutableComposition()
让compositionVideoTrack=composition.addMutableTrack(使用MediaType:.video,首选TrackID:kCMPersistentTrackID\u无效)
让compositionAudioTrack=composition.addMutableTrack(使用MediaType:.audio,preferredTrackID:kCMPersistentTrackID\u无效)
var insertTime=CMTime.zero
资产中的资产{
let range=CMTimeRange(开始:.0,持续时间:asset.duration)
guard let videoTrack=asset.tracks(with mediaType:.video)。首先,
让audioTrack=asset.tracks(使用MediaType:.audio)。首先{
持续
}
compositionVideoTrack?.preferredTransform=方向!
尝试?compositionVideoTrack?.insertTimeRange(范围,of:videoTrack,at:insertTime)
尝试?compositionAudioTrack?.insertTimeRange(范围,of:audioTrack,at:insertTime)
insertTime=CMTimeAdd(insertTime,asset.duration)
}
然后你创建一个这样的播放器

let player=AVPlayer(playerItem:AVPlayerItem(资产:合成))

是的,您可以使用AVPlayer创建自定义播放器。这对您来说太好了。在使用HLS流时可以使用这种逻辑吗?