2015-12-10 85 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

相關問題