gpt4 book ai didi

swift - 无法使用 Fairplay HLS 从 AVPlayer 获取视频缩略图

转载 作者:行者123 更新时间:2023-11-28 11:37:42 28 4
gpt4 key购买 nike

我正在尝试为 tvOS 中的视频播放器应用构建自定义进度条,并希望在用户扫描视频时显示视频的缩略图。

我正在使用 AVPlayer 和 Fairplay HLS 来播放远程视频文件。我尝试使用 2 种方法来做到这一点。一个使用 AVAssetImageGeneratorcopyCGImage,另一个使用 AVPlayerItemVideoOutputcopyPixelBuffer 方法。两者都返回零。

当我尝试使用本地视频文件时,第一种方法奏效了。

方法一:

let imageGenerator = AVAssetImageGenerator(asset: playerItem.asset)
let progressSeconds = playerItem.duration.seconds * Double(progress)
let time = CMTime(seconds: progressSeconds, preferredTimescale: 5)
if let imageRef = try? imageGenerator.copyCGImage(at: time, actualTime: nil) {
image = UIImage(cgImage:imageRef)
}

方法二:

let videoThumbnailsOutput = AVPlayerItemVideoOutput(pixelBufferAttributes: [String(kCVPixelBufferPixelFormatTypeKey): NSNumber(value: kCVPixelFormatType_32BGRA)])
player?.currentItem?.add(videoThumbnailsOutput)

if let pixelBuffer = videoThumbnailsOutput.copyPixelBuffer(forItemTime: time, itemTimeForDisplay: nil) {
let ciImage = CIImage(cvPixelBuffer: pixelBuffer)

知道我做错了什么或有其他方法吗?

谢谢!

最佳答案

这通常是通过使用与您的实际流关联的特技播放流来完成的。

https://en.wikipedia.org/wiki/Trick_mode

您可以在 HLS 流的 list 中找到使用键 EXT-X-I-FRAME-STREAM-INF 声明的它。可能需要正则表达式来解析其值。

"#EXT-X-I-FRAME-STREAM-INF[^#]*URI=[^#]*"

一旦你有了特技播放流的 URL,你就可以使用一个暂停的 AVPlayer 实例作为缩略图。并且当用户左右滑动时,您应该在缩略图中寻找播放器以显示右帧。

关于swift - 无法使用 Fairplay HLS 从 AVPlayer 获取视频缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617558/

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