gpt4 book ai didi

cocoa - AVPlayer 无缝播放和搜索多个视频文件

转载 作者:行者123 更新时间:2023-12-03 16:15:21 30 4
gpt4 key购买 nike

我目前正在编写一个小型应用程序,该应用程序需要一个包含许多短视频文件(每个约 100 万个)的文件夹,并像播放一个长视频文件一样播放它们。

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

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

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

最佳答案

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

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

let assets: [AVAsset] = urlsOfVideos.map(AVAsset.init)
let composition = AVMutableComposition()
let compositionVideoTrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
let compositionAudioTrack = composition.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid)

var insertTime = CMTime.zero
for asset in assets {
let range = CMTimeRange(start: .zero, duration: asset.duration)
guard let videoTrack = asset.tracks(withMediaType: .video).first,
let audioTrack = asset.tracks(withMediaType: .audio).first else {
continue
}

compositionVideoTrack?.preferredTransform = orientation!
try? compositionVideoTrack?.insertTimeRange(range, of: videoTrack, at: insertTime)
try? compositionAudioTrack?.insertTimeRange(range, of: audioTrack, at: insertTime)

insertTime = CMTimeAdd(insertTime, asset.duration)
}

然后你像这样创建播放器

let player = AVPlayer(playerItem: AVPlayerItem(asset: composition))

关于cocoa - AVPlayer 无缝播放和搜索多个视频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20871406/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com