2012-12-18 11 views
5

私は、1280x720ウィンドウ内のコンテンツを2番目の画面に表示するためにAV-Outを使用するiOSプロジェクトに取り組んでいます。GPUImageビデオUIView上の透明度

私はMPMoviePlayerControllerさんのバックグラウンドを、UIImagesUILabelsのような異なる要素の上に表示しています。 バックグラウンドムービーがループして再生されます。

ここでは、すべての表示要素を含むビュー全体をオーバーレイし、透過性を持つ別のフルスクリーンアニメーションを使用して、基になるビューの一部のみを表示したいとします。

まず、UIImageViewのpngアニメーションを試しました。 私はiPhone5で実際に動作することに驚きましたが、もちろんPNGは大きすぎるため、これはあまりにも多くのRAMを使い、iPhone4sの下のすべてでクラッシュします。 私は別の方法が必要です。

AVFoundationを使って2つ目のムービーを同時に再生する方法を理解しました。 これまでのところ、とても良いです。今、私はオーバーレイビデオを再生することができますが、もちろんそれはまだtrasparentではありません。

GPUImageライブラリでは、GPUImageChromaKeyBlendFilterを使用してビデオの色をフィルタして透明にし、別のビデオと組み合わせることができます。

私はまだ私が望む結果を得るために私のケースでそれを実装するための最良の方法です。

GPUImageChromaKeyBlendFilterの最初の入力としてトップのビデオの下の全体のビュー階層を使用し、2番目の入力としてグリーンスクリーンのスタイルのビデオを使用して、結果を720pに表示できますか?どうすればいい?

GPUImageChromaKeyFilterを使用して、緑色のスタイルのビデオをフィルタリングして、他のすべてのビューよりも上のビューで再生する方がよいでしょうか?このビデオの背景は透明であろうか?

ありがとうございました!

答えて

3

AVFoundation.frameworkを使用してカスタムプレーヤーを作成してから、アルファチャンネルのビデオを使用する必要があります。 AVFoundationフレームワークは、MPMediaフレームワークの多くの制限なしに、ビデオのより堅牢なハンドリングを可能にします。カスタムプレイヤーを作ることは、人々がそれを可能にするほど難しくありません。 http://www.sdkboy.com/?p=66

他の方法..........枠組みの中で

SimpleVideoFileFilterの例では、それをフィルタリングし、映画をロードする方法を示し、そして エンコード:私はここでそれについてのチュートリアルを書きましたそれをディスクに戻します。クロマキー合成を行うために、これを変更すると、次のようになります:

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"]; 
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL]; 

filter = [[GPUImageChromaKeyBlendFilter alloc] init]; 
[filter setColorToReplaceRed:0.0 green:0.0 blue:1.0]; 
[filter setThresholdSensitivity:0.4]; 

[movieFile addTarget:filter]; 

UIImage *inputImage = [UIImage imageNamed:@"background.jpg"]; 
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; 
[sourcePicture addTarget:filter]; 

NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"]; 
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie]; 
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)]; 
[filter addTarget:movieWriter]; 

[movieWriter startRecording]; 
[movieFile startProcessing]; 

[movieWriter setCompletionBlock:^{ 
    [filter removeTarget:movieWriter]; 
    [movieWriter finishRecording]; 
}]; 

上記のコードは、純粋な青のOFFキーに設定されているクロマキーフィルタにそれを養う、sample.m4vと呼ばれるアプリケーションのリソースからのムービーをロードします0.4の感度で、クロマキーイングに使用する背景画像を添付してから、すべてをMovie.m4vをアプリケーションの/ Documentsディレクトリに書き込むエンコーダに送ります。

必要に応じて入力画像を別のムービーまたは他のソースに置き換えたり、必要に応じて青の色合いを調整したりすることができます。このプロセスは、iOSデバイスのカメラからのライブビデオにも適用することができ、必要に応じて結果を画面に表示することができます。

iOS 5.0を実行しているiPhone 4では、クロマキーリングは640x480フレームのビデオで1.8ms(500+ FPS)、720pフレーム(15FPS)で65msかかります。新しいA5ベースのデバイスは、これらの操作よりも6〜10倍高速であるため、汗をかくことなく1080pのビデオを処理できます。私はフレームのアップロードと検索の両方にiOS 5.0の高速テクスチャキャッシュを使用します。これにより、4.xを超えるOSバージョンでの処理が加速されます。

私がこれについて覚えていることは、私が映画のエンコーディングで音声を録音することをかなり得られていないことですが、私はその時点で取り組んでいます。

0

フレームワークのSimpleVideoFileFilterの例では、ムービーを読み込んでフィルタリングし、ディスクにエンコードする方法を示しています。クロマキー合成を行うために、これを変更すると、次のようになります:

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"]; 
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL]; 

filter = [[GPUImageChromaKeyBlendFilter alloc] init]; 
[filter setColorToReplaceRed:0.0 green:0.0 blue:1.0]; 
[filter setThresholdSensitivity:0.4]; 

[movieFile addTarget:filter]; 

UIImage *inputImage = [UIImage imageNamed:@"background.jpg"]; 
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; 
[sourcePicture addTarget:filter]; 

NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"]; 
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie]; 
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)]; 
[filter addTarget:movieWriter]; 

[movieWriter startRecording]; 
[movieFile startProcessing]; 

[movieWriter setCompletionBlock:^{ 
    [filter removeTarget:movieWriter]; 
    [movieWriter finishRecording]; 
}]; 

上記のコードは、純粋な青のOFFキーに設定されているクロマキーフィルタにそれを養う、sample.m4vと呼ばれるアプリケーションのリソースからのムービーをロードします0.4の感度で、クロマキーイングに使用する背景画像を添付してから、すべてをMovie.m4vをアプリケーションの/ Documentsディレクトリに書き込むエンコーダに送ります。

必要に応じて入力画像を別のムービーまたは他のソースに置き換えたり、必要に応じて青の色合いを調整したりすることができます。このプロセスは、iOSデバイスのカメラからのライブビデオにも適用することができ、必要に応じて結果を画面に表示することができます。

iOS 5.0を実行しているiPhone 4では、クロマキーリングは640x480フレームのビデオで1.8ms(500+ FPS)、720pフレーム(15FPS)で65msかかります。新しいA5ベースのデバイスは、これらの操作よりも6〜10倍高速であるため、汗をかくことなく1080pのビデオを処理できます。私はフレームのアップロードと検索の両方にiOS 5.0の高速テクスチャキャッシュを使用します。これにより、4.xを超えるOSバージョンでの処理が加速されます。

私がこれについて覚えていることは、私が映画のエンコーディングで音声を録音することをかなり得られていないことですが、私はその時点で取り組んでいます。