ViewでAVPlayerLayerを使用してビデオを再生しています。私は画像をビューに変換する必要があります、私は試しましたUIViewレイヤーをUIImageに変換する
[myview.layer renderInContext:context];
しかし、これは黒い画像だけを与えます。私はその時のビデオを使ってそのビューを画像に変換したいと思っています。この変換は同時に0.05s起こる。
私はAVAssetImageGeneratorを試しました。これは資産を使って私に正しいイメージを与えます。しかし、それは私のアプリケーション上でいくつかのパフォーマンスの問題を引き起こす少し時間がかかります。特定のCMTimeのビデオをイメージに変換するプロセスを減らす方法を教えてもらえますか?
以下は私のコーディングです。
- (UIImage *)currentItemScreenShot
{
AVPlayer *abovePlayer = [objVC player];
if(imageGenerator == nil)
{
AVAsset *asset = [[[objVC player] currentItem] asset];
imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
}
CMTime time = [[abovePlayer currentItem] currentTime];
if ([imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceBefore:)] && [imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceAfter:)]) {
[imageGenerator setRequestedTimeToleranceBefore:kCMTimeZero];
[imageGenerator setRequestedTimeToleranceAfter:kCMTimeZero];
}
CGImageRef imgRef = [imageGenerator copyCGImageAtTime:time
actualTime:NULL
error:NULL];
if (imgRef == nil) {
if ([imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceBefore:)] && [imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceAfter:)]) {
[imageGenerator setRequestedTimeToleranceBefore:kCMTimePositiveInfinity];
[imageGenerator setRequestedTimeToleranceAfter:kCMTimePositiveInfinity];
}
imgRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL];
}
UIImage *image = [UIImage imageWithCGImage:imgRef];
CGImageRelease(imgRef);
image = [self reverseImageByScalingToSize:image.size :image];
return image;
}
私はその上AVPlayerLayerを使用している私の場合は、このリンクhttp://stackoverflow.com/questions/14049796/howe-to-capture-uiview-top-uiview/14049828#14049862 –
から私の答えを参照してください表示、私はそのビューでビデオフレームが必要 – Ganesh
http://stackoverflow.com/q/5388226/1378447 –