【发布时间】:2015-12-12 12:05:21
【问题描述】:
我有一个关于如何控制 MediaCapture 视频大小的问题。在 MediaCapture 记录中,视频的默认大小似乎是屏幕大小。
例如,当我将 CaptureElement 的 Width 设置为 480,CaptureElement 的 Height 设置为 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,但没有关于 Resize 方法的信息可以帮助我解决问题。我该如何解决?
预览图片的链接是[1]
[1]:http://i.stack.imgur.com/5dnIi.png 结果可以看到更多区域。
【问题讨论】:
-
我编辑了语法和段落格式,使帖子更易于阅读和理解。
标签: video windows-runtime window-resize