#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();