Как записывать видео в замедленном режиме с помощью Xamarin.ios

#xamarin #xamarin.forms #xamarin.ios

Вопрос:

У меня есть приложение Xamarin.ios, и я хочу записывать видео в замедленном режиме, но я не могу понять, как его закодировать. Может ли кто-нибудь указать мне пример, показывающий, как это сделать, или предоставить фрагмент кода, показывающий, как настроить запись видео в замедленном режиме.

[Обновление] Позвольте мне добавить немного больше информации, которую я узнал, пытаясь разгадать эту загадку…

Я могу установить формат и высокую частоту кадров задней камеры, но полученное видео записывается с частотой 30 кадров в секунду, а не 240 кадров в секунду, как я установил в коде. Я бы предпочел кодовое решение, но в качестве альтернативы установке этого в коде, если бы был способ заставить пользовательский интерфейс средства выбора камеры отображать опцию записи «замедленное движение», которая есть в стандартной камере iOS, я бы хотел попробовать.

Вот код, который позволил мне установить правильный формат и частоту кадров, но, как я уже сказал, он, похоже, не влияет на фактическую частоту кадров полученного видео. Что я упускаю? Я читал обсуждение необходимости создания сеанса захвата и создания устройств ввода и вывода, но не уверен, нужны ли они или как это закодировать в Xamarin.iOS.

 picker.AllowsImageEditing = true;  picker.ShowsCameraControls = true;  AVFoundation.AVCaptureDeviceFormat bestFormat = null; AVFoundation.AVFrameRateRange bestFrameRateRange = null;  var device = AVFoundation.AVCaptureDevice.GetDefaultDevice(AVFoundation.AVMediaType.Video);  foreach (var format in device.Formats) {  foreach (var range in format.VideoSupportedFrameRateRanges)  {  if (range.MaxFrameRate gt; ((bestFrameRateRange != null) ? bestFrameRateRange.MaxFrameRate : 0))  {  bestFormat = format;  bestFrameRateRange = range;  }  } }  AVFoundation.AVCaptureDevice.GetDefaultDevice(AVFoundation.AVMediaType.Video).LockForConfiguration(out error);  // Set the device's active format. device.ActiveFormat = bestFormat;  // Set the device's min/max frame duration. var duration = bestFrameRateRange.MinFrameDuration; device.ActiveVideoMinFrameDuration = duration; device.ActiveVideoMaxFrameDuration = duration;  AVFoundation.AVCaptureDevice.GetDefaultDevice(AVFoundation.AVMediaType.Video).UnlockForConfiguration();