0

カメラからAVCaptureVideoPreviewLayerを使用してUIImageviewへのストリームを遅らせるにはどうすればよいですか?

以下でそれらをバインドする方法を参照してください、しかし私はそれを遅らせる方法を理解することができません(私はそれをリアルタイムで望んでいません)

AVCaptureVideoPreviewLayer* captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

captureVideoPreviewLayer.frame = self.imageView.bounds;
[self.imageView.layer addSublayer:captureVideoPreviewLayer];
4

1 に答える 1

0

最初に、現在持っているプレビュー レイヤー フレームを削除する必要があります。これは、これらのプレビュー フレームをすぐに遅延させる方法がないためです。

バッファを作成する必要があります。いくつかのフレームについて話している場合、一方の端から画像ビューをフィードしている間に、一方の端で UIImages を埋めている NSMutableArray を持つことができます。

UIImage は didOutputSampleBuffer メソッドから取得されます。UIImageView に表示されない CMSampleBufferRef から作成されたこの UIImage のようなものを使用しますか?

さて、あなたが対処しなければならないいくつかの課題:

  • 数秒の遅延について話している場合、5 秒は約 150 フレームになります。非常に小さく、最新のデバイスでない限り、150個のUIImageをメモリに保存することはできません
  • 画像をディスクに保存し、アレイに画像自体ではなくそれらの画像のパスのみを保存することで解決します。リアルタイムで読み取り/書き込み操作を行うため、パフォーマンスの問題が発生する可能性があり、フレームレートが低下します。
  • フレーム レートが悪いため、記録されたフィードとライブ フィードの間の同期が失われないようにする必要があります。そうしないと、5 秒の遅延で開始し、はるかに長い遅延が発生します。

うまくいけば、いくつかのトレードオフ(フレームレートが遅くなる...)で実行できますが、実行できます。(私は非常に似たようなことを何度も行っていますが、IP 上の理由からコードを共有することはできません)。

于 2012-11-24T23:46:26.187 に答える