C# 如何以纵向方向录制视频?

C# 如何以纵向方向录制视频?,c#,video,camera,windows-phone-8.1,media,C#,Video,Camera,Windows Phone 8.1,Media,我正在为Windows Phone 8.1开发一个应用程序,它使用MediaCapture类录制视频。我想通过旋转设备,让用户可以自由录制纵向或landsapce视频。请注意,我的应用程序具有固定的纵向方向。由于方向固定,我使用SimpleOrientationSensor类的OrientationChanged事件 现在我注意到默认摄像头应用程序和我的应用程序中录制的portait视频有些不同。您可以在下面给定的图像中看到差异。所有视频的分辨率均为720p。播放器图像为纵向锁定方向。下面也给出

我正在为Windows Phone 8.1开发一个应用程序,它使用MediaCapture类录制视频。我想通过旋转设备,让用户可以自由录制纵向或landsapce视频。请注意,我的应用程序具有固定的纵向方向。由于方向固定,我使用SimpleOrientationSensor类的OrientationChanged事件

现在我注意到默认摄像头应用程序和我的应用程序中录制的portait视频有些不同。您可以在下面给定的图像中看到差异。所有视频的分辨率均为720p。播放器图像为纵向锁定方向。下面也给出了代码。谁能解释一下我录制肖像视频的代码有什么问题吗?谢谢


Microsoft github页面上有一个相关的示例,尽管它们的目标是Windows 10。不过,这些API应该可以在8/8.1上使用

:此选项可捕获视频并支持纵向和横向。以下是相关部分:

// Create storage file in Pictures Library
var videoFile = await KnownFolders.PicturesLibrary.CreateFileAsync("SimpleVideo.mp4", CreationCollisionOption.GenerateUniqueName);

var encodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto);

// Calculate rotation angle, taking mirroring into account if necessary
var rotationAngle = 360 - ConvertDeviceOrientationToDegrees(GetCameraOrientation());
encodingProfile.Video.Properties.Add(RotationKey, PropertyValue.CreateInt32(rotationAngle));

await _mediaCapture.StartRecordToStorageFileAsync(encodingProfile, videoFile);
仔细看看这个示例,看看如何首先获得相机的方向(我发布的代码片段中正在调用它)。您通常不想调用SetRecordRotation(或SetPreviewRotation),因为它们对仅仅添加旋转元数据有性能影响


观看最近的//build/conference,其中包括一些相机示例的演练,并为您提供有关示例的更多上下文。

问题已随主要问题完全更新。
// Create storage file in Pictures Library
var videoFile = await KnownFolders.PicturesLibrary.CreateFileAsync("SimpleVideo.mp4", CreationCollisionOption.GenerateUniqueName);

var encodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto);

// Calculate rotation angle, taking mirroring into account if necessary
var rotationAngle = 360 - ConvertDeviceOrientationToDegrees(GetCameraOrientation());
encodingProfile.Video.Properties.Add(RotationKey, PropertyValue.CreateInt32(rotationAngle));

await _mediaCapture.StartRecordToStorageFileAsync(encodingProfile, videoFile);