18

フレームワークを使用してビデオを録画する機能を完全にセットアップしました。AVFoundationこれはすべて問題ありませんが、録画中にオーバーレイを追加しようとしています(AVCaptureVideoPreviewLayerレイヤーにも表示されます) 。

このオーバーレイUIViewオブジェクトをVideoPreviewLayerに追加できますが、録画したビデオに同じビューを表示する方法に苦労しています。これには、sからsまでのすべてUIViewが含まれる可能性があります。UILabelUIImageView

4

4 に答える 4

10

これがあなたが探しているものかどうかはわかりませんが、Brad LarsonのGPUライブラリを使用できると思います。オーバーレイとビューを追加できるGPUImageElementというクラスがあります。例、特にFiltershowcaseと呼ばれるものを確認してください。 UIElementと呼ばれるものまでスクロールします。

サンプルコードは次のとおりです。

 else if (filterType == GPUIMAGE_UIELEMENT)
        {
            GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
            blendFilter.mix = 1.0;

            NSDate *startTime = [NSDate date];

            UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 240.0f, 320.0f)];
            timeLabel.font = [UIFont systemFontOfSize:17.0f];
            timeLabel.text = @"Time: 0.0 s";
            timeLabel.textAlignment = UITextAlignmentCenter;
            timeLabel.backgroundColor = [UIColor clearColor];
            timeLabel.textColor = [UIColor whiteColor];

            uiElementInput = [[GPUImageUIElement alloc] initWithView:timeLabel];

            [filter addTarget:blendFilter];
            [uiElementInput addTarget:blendFilter];

            [blendFilter addTarget:filterView];

            __unsafe_unretained GPUImageUIElement *weakUIElementInput = uiElementInput;

            [filter setFrameProcessingCompletionBlock:^(GPUImageOutput * filter, CMTime frameTime){
                timeLabel.text = [NSString stringWithFormat:@"Time: %f s", -[startTime timeIntervalSinceNow]];
                [weakUIElementInput update];
            }];
        }
于 2013-09-05T12:53:28.497 に答える
6

をオーバーレイしたいのですが、sをUIView使用してもかまわない場合は、エクスポート後に'sプロパティCALayerを使用してオーバーレイを追加できます。これには、出力にアニメーションを追加できるプロパティがありますが、オーバーレイの外観をで記述できない場合は運が悪いと思います。表示見出しの例は可能かもしれませんが、現在の時間カウンターのように単純なものは想像できません。この制限に耐えられるのであれば、WWDC2010コードサンプル「AVEditDemo」が出発点として適しています。AVAssetExportSessionAVVideoCompositionAVVideoCompositionCoreAnimationTool *animationToolCALayerCABasicAnimation

さらに制御が必要な場合はUIView、を使用してキャプチャフレームにオーバーレイを手動でレンダリングし、を使用[view.layer renderInContext:contextToThenRenderToFrame]してこれらのフレームをファイルAVAssetWriterに書き込むことができます(フレームをメモリにキャプチャすると、使用できなくなりますAVCaptureMovieFileOutput)。

警告:キャプチャしているフレームは均一な速度で到着しない可能性があり、周囲の照明やシステムの負荷によっても異なります。オーバーレイがキャプチャビデオよりも速い速度で変化する場合は、2番目のソリューションでフレームを繰り返す必要があります。これはAVVideoComposition、最初のソリューションで処理されます。

PS Solution 2は面倒ですが、詳細に立ち入ることなく、iOS7はこれをはるかに簡単にしたようです。

于 2013-09-02T05:42:30.530 に答える
1

これは、編集部分 のAVFoundationプログラミングガイドにあります。

画像のオーバーレイを扱うセクションがあります。サンプルコード/projectを作成してみます。

于 2013-09-05T14:03:51.080 に答える
0

あなたの問題を理解するために、raywenderlichチュートリアルサイトには2つの非常に詳細な説明があります。これは2部構成のチュートリアルです。

最初のものはここにあります:http ://www.raywenderlich.com/13418/how-to-play-record-edit-videos-in-ios

2つ目はここにあります: http ://www.raywenderlich.com/30200/avfoundation-tutorial-adding-overlays-and-animations-to-videos

幸運と希望これがお役に立てば幸いです!!

于 2013-09-06T01:44:33.270 に答える