2015-12-10 5 views
0

У меня вопрос о том, как контролировать размер видеозаписи MediaCapture. В записи MediaCapture размер по умолчанию для видео отображается как размер экрана.Как изменить размер видео в соответствии с пользовательским размером в WinRT

Например, когда я установил ширину CaptureElement в 480 и высоту CaptureElement до 320, я вижу, что предварительный просмотр области видео составляет 480 * 320. Но когда я записываю его в файл и останавливаю, размер видео в файле - это размер экрана (область просмотра 768 * 1280). Как я могу получить размер видео в файле размером 320 * 240?

Первичный код:

  DeviceInformation cameraDevice = await FindDeviceInfo(panel); 
      if (cameraDevice == null) 
      { 
       return; 
      } 
      var mediaInitSettings = new MediaCaptureInitializationSettings { VideoDeviceId = cameraDevice.Id }; 
      _encodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Qvga); 
      if (_encodingProfile.Video != null) 
      { 
       _encodingProfile.Video.PixelAspectRatio.Numerator = 4; 
       _encodingProfile.Video.PixelAspectRatio.Denominator = 3; 
      } 
      var isInitialized = false; 
      try 
      { 
       _mediaCapture.VideoDeviceController.PrimaryUse = CaptureUse.Video; 
       await _mediaCapture.InitializeAsync(mediaInitSettings); 
       isInitialized = true; 
       var formatSelector = new Func<VideoEncodingProperties, bool>(ep => ep.Height * ep.Width == 640 * 480 && string.Equals(ep.Subtype, "nv12", StringComparison.OrdinalIgnoreCase)); 
       var recordFormat = _mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.VideoRecord).OfType<VideoEncodingProperties>().FirstOrDefault(formatSelector); 
       var previewFormat = _mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.VideoPreview).OfType<VideoEncodingProperties>().FirstOrDefault(formatSelector); 
       if (previewFormat != null) 
        await 
         _mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoPreview, 
          previewFormat); 
       if (recordFormat != null) 
        await 
         _mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoRecord, 
          recordFormat); 
      } 
      catch (Exception ex) 
      { 
       Debug.WriteLine("Exception when initializing MediaCapture with {0}: {1}", cameraDevice.Id, ex.ToString()); 
      } 

Я пытался использовать MediaComposition, но нет никакой информации о методе изменения размера, который помог бы мне решить эту проблему. Как я могу это решить?

Ссылка на изображение предварительного просмотра является [1]

[1]: http://i.stack.imgur.com/5dnIi.png результата можно увидеть больше региона.

+0

Я редактировал грамматику и форматирование абзацев, чтобы сделать сообщение немного легче читать и понимать. – paisanco

ответ

0

Существует документация, которая должна охватывать, что вы пытаетесь сделать:

  1. CameraStarterKit
  2. CameraResolution
  3. Set media encoding properties

Первый образец покажет вам основное приложение камеры, с простым способом инициализировать его и записывать видео.

Вторая научит вас, как выбрать, с какой резолюцией вы хотите снимать видео. Размер CaptureElement не связан с размером кадров предварительного просмотра, поскольку он может сделать масштабирование для вас.

Если вы хотите изменить разрешение видео, документация по третьей ссылке должна объяснить большинство вещей, которые вам нужно знать.

Используя VideoEncodingQuality.Qvga, вы устанавливаете конвейер для перекодирования. Это означает, что устройство камеры будет захватывать видео по умолчанию, и Windows затем изменит его размер в соответствии с размерами QVGA. Это может привести к потере качества, поэтому обычно рекомендуется использовать VideoEncodingQuality.Auto и использовать SetMediaStreamPropertiesAsync, чтобы выбрать разрешение захвата видео в источнике, при условии, что камера поддерживает требуемые размеры.

Наконец, что последнее звено документации также упоминает важный аспект:

На некоторых устройствах, на той же аппаратной шпилька используется как для предварительного просмотра и захвата потоков. На этих устройствах, устанавливая свойства кодирования , вы также установите другой. На устройствах, использующих разные аппаратные средства контакты для захвата и предварительного просмотра, свойства могут быть установлены для каждого потока независимо. Используйте следующий код, чтобы определить, независимы ли потоки предварительного просмотра и захвата . Вы должны настроить свой UI , чтобы включить или отключить настройку потоков независимо на основании результатов этого теста.

+0

привет, я рад получить ваш ответ. Я видел образец. Вопрос не в разрешении, а в изменении размера. Я хочу получить результат на половину экрана, но результат камеры - полный экран. Скорее всего, команда ffmpeg урожая. Есть ли у него api? Благодаря! – alexis