私は、スローモーションビデオ録画の実装を検討していました。私は、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];
}
}
}
これについては、参考にしてください。私は実際にいくつかの統計データを作成する必要があります。または、すべてのデバイスをチェックインする必要があります。 – Nil