4

私は、フロントカメラのビデオフレームをキャプチャしてエンコードし、反対側に転送する必要があるビデオストリーミングアプリケーションを開発しています。典型的なフローは次のとおりです

AVCaptureSession -> AVCaptureDeviceInput -> AVCaptureVideoDataOutput -> フレームをキャプチャする -> フレームをエンコードする -> フレームを相手側に送信する、

それは正常に動作します。フレーム形式としてkCVPixelFormatType_420YpCbCr8BiPlanarVideoRangeをセットアップしました。

また、プレビューを表示するために使用されているプレビューレイヤー、

問題は、デバイスの向きが変更されたときに発生します。デバイスが縦向きから横向きに移動した場合、他のエンド フレームで 90 回転します。向きはプレビュー レイヤーでサポートされているため、Capture コールバックで回転したバッファを自動的に受け取ることを期待していました。 、しかし、プレビューレイヤーはキャプチャされたバッファのプレビューを表示するだけで、UIはバッファをオレートしますが、反対側では轟音バッファを取得します。

だから私は知りたいです、それを変更するための設定はありますか、またはキャプチャバッファコールバックでバッファを回転/変換する必要がありますか?

4

1 に答える 1

8

調べてくれてありがとう、基本的に解決策は、接続の向きを設定する必要があり、プレビューレイヤーで遊んでいたので、プレビューレイヤーに影響しますが、向きには影響しません。

ここにコードスニペットがあります

-(void) orientationChanged
{
    // get the new orientation from device 
    AVCaptureVideoOrientation newOrientation = [self videoOrientationFromDeviceOrientation];

    // set the orientation of preview layer :( which will be displayed in the device )
    [previewLayer.connection setVideoOrientation:newOrientation];

    // set the orientation of the connection: which will take care of capture
    [pCaptureConnection setVideoOrientation:newOrientation];

}
于 2014-10-08T10:39:49.783 に答える