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

Swift 无法使用Fairplay HLS从AVPlayer获取视频缩略图,swift,avfoundation,tvos,http-live-streaming,fairplay,Swift,Avfoundation,Tvos,Http Live Streaming,Fairplay,我正在尝试为tvOS中的视频播放器应用程序构建自定义进度条,并希望在用户扫描视频时显示视频的缩略图 我正在使用AVPlayer和Fairplay HLS播放远程视频文件。我试着用两种方法来做这件事。一个使用AVAssetImageGenerator的copyCGImage,另一个使用AVPlayerItemVideoOutput的copyPixelBuffer方法。两者都返回零 当我尝试使用本地视频文件时,第一种方法奏效了 方法1: let imageGenerator = AVAssetIma

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

我正在使用
AVPlayer
和Fairplay HLS播放远程视频文件。我试着用两种方法来做这件事。一个使用
AVAssetImageGenerator
copyCGImage
,另一个使用
AVPlayerItemVideoOutput
copyPixelBuffer
方法。两者都返回零

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

方法1:

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)
}
方法2:

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)
你知道我做错了什么吗?还有别的办法吗


谢谢

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

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

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

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

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

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

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

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

我认为这通常是在服务器端完成的,缩略图是清单的一部分……如果是这样,如何从清单中获取缩略图?我认为这通常是在服务器端完成的,并且缩略图是清单的一部分……如果是这样,如何从清单中获取缩略图?问题是,每次搜索需要一到两秒钟的时间,我希望能像苹果播放器提供的那样即时获取。你知道一种方法吗,也许可以预加载所有(减少的)视频,这样它发生得更快?我是AVPlayer的新手,希望像YouTube一样添加技巧播放。我查阅了很多文件,但什么也没找到。iOS版AVPlayer是否支持玩把戏功能?对于Apple TV,它是受支持的:即使I-FRAME-STREAM受到Apple Fairplay DRM的保护,它也能工作?问题是,每次搜索都需要一到两秒钟的时间,我希望像Apple player提供的那样即时搜索。你知道一种方法吗,也许可以预加载所有(减少的)视频,这样它发生得更快?我是AVPlayer的新手,希望像YouTube一样添加技巧播放。我查阅了很多文件,但什么也没找到。iOS版AVPlayer是否支持玩把戏功能?对于Apple TV,它是受支持的:即使I-FRAME-STREAM受到Apple Fairplay DRM的保护,它也可以工作?