2017-06-28 7 views
1

私は、スローモーションビデオ録画の実装を検討していました。私は、AVCaptureDevice's activeFormatプロパティを設定することでそれができることを発見しました。AVCaptureDeviceFormatがスローモーション録画をサポートしているかどうかを確認する方法は?

最高のフレームレートを得るためのコードがあります。しかし、もし私が解像度を固定したいのであれば、スローモアが起こるが特定の解像度を上回るようにする。低解像度のスローモーション動画は欲しくない。

私は5Sでテストし、それは以下のように、最も高いフレームレートを提供します:

Format: <AVCaptureDeviceFormat: 0x174006680 'vide'/'420v' 1280x 720, { 3-120 fps}, fov:58.080, binned, supports vis, max zoom:52.00 (upscales @1.16), AF System:1, ISO:34.0-1088.0, SS:0.000012-0.333333> 

Range: <AVFrameRateRange: 0x17400a5a0 3 - 120> 

Question1:現在のデバイスは、スローモーション記録をサポートしているかどうかを確認する方法?

質問2:しきい値として1280x720を設定したい場合はどうすればよいですか?だから、もし将来的にリンゴが同じ3〜120 fpsをサポートしているが、解像度が低いデバイスを作るのであれば?私は私のビデオ品質が苦しむことを望んでいません。

質問3:これを設定した後は、activeFormatのプロパティ、「デフォルトのフレームレートに戻すにはどうすればよいですか?ここで

はコードです:

- (void)configureCameraForHighestFrameRate:(AVCaptureDevice *)device 
{ 
    AVCaptureDeviceFormat *bestFormat = nil; 
    AVFrameRateRange *bestFrameRateRange = nil; 
    for (AVCaptureDeviceFormat *format in [device formats]) { 
     for (AVFrameRateRange *range in format.videoSupportedFrameRateRanges) { 
      if (range.maxFrameRate > bestFrameRateRange.maxFrameRate) { 
       bestFormat = format; 
       bestFrameRateRange = range; 
      } 
     } 
    } 
    if (bestFormat) { 
     if ([device lockForConfiguration:NULL] == YES) { 
      device.activeFormat = bestFormat; 
      device.activeVideoMinFrameDuration = bestFrameRateRange.minFrameDuration; 
      device.activeVideoMaxFrameDuration = bestFrameRateRange.minFrameDuration; 
      [device unlockForConfiguration]; 
     } 
    } 
} 

答えて

1

あなたが最小120FPSの範囲で良質なスローモーション映像を取得します。 だから、あなたは

device.activeVideoMaxFrameDuration.timescale >= 120 

NBでそれを確認することができます:あなたは手動で値を交換する前にそれを確認してください。

+0

これについては、参考にしてください。私は実際にいくつかの統計データを作成する必要があります。または、すべてのデバイスをチェックインする必要があります。 – Nil

関連する問題