Как получить изображение кадра перед воспроизведением потокового видео m3u8? iOS

У меня есть требование: получить изображение кадра перед воспроизведением потокового видео (m3u8) в качестве предварительного просмотра видео. Я использую AVPlayerItemVideoOutpu copyPixelBufferForItemTime: itemTimeForDisplay: только при воспроизведении потокового видео, чтобы перейти к изображению кадра. У вас есть другой метод? спасибо!!

Это мой код:

CMTime itemTime = self.playerItem.currentTime;
CVPixelBufferRef pixelBuffer = [_playerItemVideoOutput copyPixelBufferForItemTime:itemTime itemTimeForDisplay:nil];
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CIContext *temporaryContext = [CIContext contextWithOptions:nil];
CGImageRef videoImage = [temporaryContext
                                 createCGImage:ciImage
                                 fromRect:CGRectMake(0, 0,
                                                     CVPixelBufferGetWidth(pixelBuffer),
                                                     CVPixelBufferGetHeight(pixelBuffer))];

UIImage *uiImage = [UIImage imageWithCGImage:videoImage];
CGImageRelease(videoImage);
NSLog(@"uiImage:%@", uiImage);

person Sanchain    schedule 28.04.2016    source источник


Ответы (1)


Изменить:
я преобразовал этот проект в Swift. Вот новый репозиторий ACThumbnailGenerator-Swift.

Использование:

var generator: ACThumbnailGenerator!

func captureSomeImage() {
    let streamUrl = URL(string: "https://p-events-delivery.akamaized.net/18oijbasfvuhbfsdvoijhbsdfvljkb6/m3u8/hls_vod_mvp.m3u8")!
    generator = ACThumbnailGenerator(streamUrl: streamUrl)
    generator.delegate = self
    generator.captureImage(at: 300)
}

func generator(_ generator: ACThumbnailGenerator, didCapture image: UIImage, at position: Double) {
    // Use `image`
}

Исходный ответ:

Как вы указали в своем вопросе, AVPlayerItemVideoOutput - это путь, НО видео не нужно воспроизводить, оно просто должно быть «готово».

Я создал простую и удобную в использовании утилиту, которая следует этому принципу для извлечения эскизов из удаленных потоков. (https://github.com/acotilla91/ACThumbnailGenerator)

Как пользоваться:

double bitRate = 1000000; // force video bit rate (can be use to cap video quality and improve performance). Pass 0 to use default bit rate.
self.thumbnailGenerator = [[ACThumbnailGenerator alloc] initWithPreferredBitRate:bitRate];

NSURL *videoURL = [NSURL URLWithString:@"http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"];
int position = 10; // video position (in seconds) from where thumbnail should be extracted. Always pass 0 for live streams.

[self.thumbnailGenerator loadImageFrom:videoURL position:position withCompletionBlock:^(UIImage *image) {

    // use `image`            

}];

Надеюсь, поможет.

person Alejandro Cotilla    schedule 26.11.2016
comment
Как насчет андроида братан? - person Chivorn; 02.11.2018