2017-01-27 19 views
0

私は、接続されたカメラからのビデオ入力をキャプチャするためにAVCaptureVideoPreviewLayer(MacOS、iOSではなく)を使用しています。私は、セットアップキャプチャセッションをしましたし、画像を表示するためのUIViewを作成:AVCaptureVideoPreviewLayerをmacOSでミラーリングできません

self.captureLayer = AVCaptureVideoPreviewLayer(session: self.captureSession); self.playerView.layer = self.captureLayer;

すべてが正常に動作している、と私はカメラからの映像を見るが、今私は(垂直)画像をミラーリングします。しかし、層がちょうど空白(親ビューの背景を)行く代わりに画像をミラーリングの

self.captureLayer.transform = CATransform3DMakeScale(-1.0, 1.0, 1.0);

:私はCATransform3DMakeScaleを使用しています。

他のトランスフォーム(サイズ変更など)を試しても問題なく動作しています。私はまた、スーパーレイヤミラーリング試してみた:

self.captureLayer.superLayer?.transform = CATransform3DMakeScale(-1.0, 1.0, 1.0);

をと(それがタイトルバーを含むウィンドウ全体を反映するものの!)これは動作します。

助けてください。私は変換が正しいと信じていますが、何らかの理由でAVCaptureVideoPreviewLayerに適用されません。

+0

私が提供する解決策を試すことができますか? – manishg

+0

ありがとう@manishganvir - 本当に答えとコードのサンプルをありがとう。今週末に試してみますが、これがうまくいけば、横方向のアクセスをミラーリングするだけだと思っていますが、CATransform3DMakeScaleを使って縦にミラーリングすることもできます(私のアプリでも使われています)。 –

+0

@manishganvirちょうどサンプルコードを実行しました。 'self.cameraLayer!.connection.videoOrientation = AVCaptureVideoOrientation.portraitUpsideDown'も私に垂直ミラーリングを提供します。ご協力いただきありがとうございます! –

答えて

0

これを行うには、avcaptureconnectionプロパティを使用できます。

self.cameraLayer = AVCaptureVideoPreviewLayer(session: frontVideoSession) 
self.cameraLayer!.videoGravity = AVLayerVideoGravityResizeAspectFill 

    if (self.cameraLayer!.connection.isVideoMirroringSupported) 
    { 
     self.cameraLayer!.connection.automaticallyAdjustsVideoMirroring = false 
     self.cameraLayer!.connection.isVideoMirrored = true 
    } 

あなたはisVideoMirroredフラグはあなたがビデオやないをミラーリングするかどうかを選択することができますhttps://developer.apple.com/reference/avfoundation/avcaptureconnection/1389172-isvideomirrored


でこれについての詳細を読むことができます。 trueに設定すると動画を反映し、falseに設定すると反映されません。このフラグを使用するには、automaticallyAdjustsVideoMirroringフラグをfalseに設定する必要があります。


https://github.com/manishganvir/mac-camera-mirror-exampleのサンプルコードを書き込みました。同じものを確認してください。スニペット以下

関連する問題