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

相关问题