Я пытаюсь создать собственный индикатор выполнения для приложения видеопроигрывателя в tvOS и хотел бы показывать миниатюры видео, пока пользователь просматривает видео.
Я использую AVPlayer
и Fairplay HLS для воспроизведения удаленных видеофайлов.Я пытался сделать это, используя 2 метода.Один с 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)
Есть идеи, что я делаю не так или есть другой способ?
Спасибо!