2016-04-28 1 views
1

私はビデオプレビュー表示として、ビデオストリーミング(m3u8)を再生する前にフレーム画像を取得するという要求があります。私はAVPlayerItemVideoOutpucopyPixelBufferForItemTime:itemTimeForDisplay:のみを使用して、フレーム画像を取得するためにビデオストリーミングを再生する場合は、他の方法がありますか?ありがとう!!m3u8ビデオストリーミングを再生する前にフレームイメージを取得するには? iOS

これは私のコードです:あなたはあなたの質問で述べたように、

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

答えて

2

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`    

}]; 

はそれがお役に立てば幸いです。

関連する問題