Не удалось получить миниатюру видео из AVPlayer с помощью Fairplay HLS - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь создать собственный индикатор выполнения для приложения видеопроигрывателя в 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)

Есть идеи, что я делаю не так или есть другой способ?

Спасибо!

1 Ответ

0 голосов
/ 13 февраля 2019

Обычно это делается с использованием потока специализированного режима воспроизведения, связанного с вашим реальным потоком.

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

Вы можете найти его объявленным с ключом EXT-XI-FRAME-STREAM-INF в манифесте вашего потока HLS.Для анализа его значения может потребоваться регулярное выражение.

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

Получив URL-адрес потока специализированного режима воспроизведения, вы можете использовать приостановленный экземпляр AVPlayer в качестве эскиза.И когда пользователь проведет пальцем влево и вправо, вы должны искать игрока на миниатюре, чтобы показать правую рамку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...