2

私のアプリケーション ではAVCaptureSession、記録に使用していますvideo

録画が完了すると、ビデオのサイズが になります360 X 480

記録層サイズを に設定し320 X 568ました。

何かが欠けています。試してみましたが、どこにも行きません。

videoのサイズで録音を取得するには、どこを変更すればよいか教えてもらえますか320 X 568

ここに私のコードがあります、

初期化

AVCaptureDevice* device = nil;
AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init];
captureOutput.alwaysDiscardsLateVideoFrames = YES; 



dispatch_queue_t queue;
queue = dispatch_queue_create("cameraQueue", NULL);
[captureOutput setSampleBufferDelegate:self queue:queue];
dispatch_release(queue);

// BGRA にフレームを保存するようにビデオ出力を設定します

NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; 
NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; 
NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; 
[captureOutput setVideoSettings:videoSettings]; 

//そして、キャプチャ セッションを作成します

self.captureSession = [[AVCaptureSession alloc] init];
self.captureSession.sessionPreset = AVCaptureSessionPresetMedium;

if([self.captureSession respondsToSelector:@selector(addInput:)])
        [self.captureSession addInput:captureInput];
    if([self.captureSession respondsToSelector:@selector(addOutput:)])
        [self.captureSession addOutput:captureOutput];

/*We add the Custom Layer (We need to change the orientation of the layer so that the video is displayed correctly)*/
self.customLayer = [CALayer layer];
self.customLayer.frame = self.view.bounds;

self.customLayer.transform = CATransform3DRotate(CATransform3DIdentity, M_PI/2.0f, 0, 0, 1);
    self.customLayer.transform = CATransform3DScale(self.customLayer.transform,.7,.7,1);
    self.customLayer.transform = CATransform3DTranslate(self.customLayer.transform,-23,0,0);

self.customLayer.contentsGravity = kCAGravityResizeAspectFill;
[self.view.layer addSublayer:self.customLayer];
[self.captureSession startRunning];

//初期化終了

4

3 に答える 3

1

AvCaptureSessionMedium では、320 * 568 の画像解像度は許可されません。AVCaptureSession には、この解像度のプロパティ セットはありません。

AVCaptureSessionPresetMedium は、360.000000 および 480.000000 のカメラ解像度を使用します。これは AVCaptureSessionPresetMedium のデフォルトの解像度であるため、iPhone-5 ディスプレイでは機能しません。

iPhone-5 でより解像度の高い画像を取得する場合は、AVCaptureSessionPresetHigh を使用する必要があります。ただし、1980 * 1080 の画像解像度が提供されるため、問題なく動作しますが、画像のサイズ バイトが増加します。

また、これで確認できます:

 AVCaptureSession *newCaptureSession = [[AVCaptureSession alloc] init];    

     if (IS_IPHONE5) 
    {          
               newCaptureSession.sessionPreset = AVCaptureSessionPresetHigh; 
    }
    else
            {
           newCaptureSession.sessionPreset = AVCaptureSessionPresetMedium;

            }
于 2014-02-04T07:12:32.477 に答える
1

self.customLayer.frame = self.view.bounds;このコード行の前に、iPhone5かどうかを確認してみてください。はいの場合は、そのフレームを手動で次のように設定します

次のように確認できます:-

#define isiPhone5 ([[UIScreen mainScreen] bounds].size.height == 568)?TRUE:FALSE

//We add the Custom Layer (We need to change the orientation of the layer so that the video is displayed correctly)*/

self.customLayer = [CALayer layer];


if(isIphone5)
{
self.customLayer.frame = CGRectMake(0, 0, 320, 568);
}
else
{
self.customLayer.frame = CGRectMake(0, 0, 320, 480);

}

これがあなたの助けになることを願っています

于 2013-05-20T14:04:36.017 に答える
0
 if ([self.captureSession canSetSessionPreset:AVCaptureSessionPreset320*568]) 
    {
        [self.captureSession setSessionPreset:AVCaptureSessionPreset320*568];
    }

これを試してください。

于 2013-05-20T13:16:19.290 に答える