2016-04-28 15 views
1

Ich habe eine Nachfrage: Holen Sie sich das Bild vor dem Video-Streaming (m3u8), als Video-Vorschau-Display. Ich benutze AVPlayerItemVideoOutpucopyPixelBufferForItemTime: itemTimeForDisplay: nur wenn Sie das Video-Streaming spielen, um zum Bild zu bekommen, haben Sie andere Methode? Vielen Dank!!Wie bekomme ich das Frame-Bild vor dem Abspielen von m3u8 Video-Streaming? iOS

Dies ist mein Code:

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); 

Antwort

2

Wie Sie in Ihrer Frage erwähnt, AVPlayerItemVideoOutput ist der Weg zu gehen, aber das Video muss nicht spielen werden, es muss nur „bereit sein, ".

Ich habe ein einfaches und benutzerfreundliches Dienstprogramm erstellt, das diesem Prinzip folgt, um Miniaturansichten aus Remote-Streams zu extrahieren. (https://github.com/acotilla91/ACThumbnailGenerator)

Wie verwenden:

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`    

}]; 

Hoffe, es hilft.