【发布时间】:2019-07-04 04:19:14
【问题描述】:
我正在尝试为 tvOS 中的视频播放器应用构建自定义进度条,并希望在用户扫描视频时显示视频的缩略图。
我正在使用 AVPlayer 和 Fairplay HLS 播放远程视频文件。我尝试使用 2 种方法来做到这一点。一个使用AVAssetImageGenerator 的copyCGImage,另一个使用AVPlayerItemVideoOutput 的copyPixelBuffer 方法。两者都返回 nil。
当我尝试使用本地视频文件时,第一种方法有效。
方法一:
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)
任何想法我做错了什么或有其他方法吗?
谢谢!
【问题讨论】:
-
我认为这通常是在服务器端完成的,缩略图是清单的一部分......
-
如果是这样,如何从清单中获取缩略图?
标签: swift avfoundation tvos http-live-streaming fairplay