Я разрабатываю приложение для Windows Phone 8.1, которое использует класс MediaCapture для записи видео. Я хочу предоставить пользователю свободу записывать видео в портрете или в ландшафтном режиме, просто поворачивая устройство. Обратите внимание, что мое приложение имеет фиксированную портретную ориентацию. Из-за фиксированной ориентации я использую событие OrientationChanged класса SimpleOrientationSensor.Как записать видео в портретной ориентации?
Теперь я заметил, что файл portait, записанный в приложении камеры по умолчанию, и в моем приложении имеет некоторые отличия. Вы можете видеть разницу в приведенных ниже изображениях. Все видеоролики находятся в разрешении 720p. Изображения игрока имеют ориентацию портретной блокировки. Код также приведен ниже. Может ли кто-нибудь объяснить мне, что случилось с моим кодом для записи портретного видео? Благодаря!
MediaCaptureInitializationSettings set;
MediaCapture _camCapture;
VideoRotation videoRotation = VideoRotation.None;
bool _isRecording = false;
// Camera resource disposal is handled properly
private async Task InitializeCamera()
{
try
{
if (set == null)
{
set = new MediaCaptureInitializationSettings();
DeviceInformation deviceID = (await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture))
.FirstOrDefault(x => x.EnclosureLocation != null && x.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back);
if (deviceID != null)
{
set.VideoDeviceId = deviceID.Id;
}
}
_camCapture = new MediaCapture();
await _camCapture.InitializeAsync(set);
VideoView.Source = _camCapture; //VideoView is CaptureElement object in XAML
_camCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees);
await _camCapture.StartPreviewAsync();
}
catch (Exception ex)
{
}
}
private async void OrientationChanged(object sender, SimpleOrientationSensorOrientationChangedEventArgs e)
{
try
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() =>
{
DetectCurrentOrintation(e.Orientation);
});
}
catch (Exception ex)
{
}
}
private void DetectCurrentOrintation(SimpleOrientation orientation)
{
try
{
switch (orientation)
{
case SimpleOrientation.NotRotated:
videoRotation = VideoRotation.Clockwise90Degrees;
break;
case SimpleOrientation.Rotated90DegreesCounterclockwise:
videoRotation = VideoRotation.None;
break;
case SimpleOrientation.Rotated180DegreesCounterclockwise:
videoRotation = VideoRotation.Clockwise270Degrees;
break;
case SimpleOrientation.Rotated270DegreesCounterclockwise:
videoRotation = VideoRotation.Clockwise180Degrees;
break;
default:
break;
}
}
catch (Exception ex)
{
}
}
private async void btnRecordVideo_Click(object sender, RoutedEventArgs e)
{
try
{
if (!_isRecording)
{
var _videoRecording = await MyFolderInLocalFolder.CreateFileAsync("testRecord.mp4", CreationCollisionOption.GenerateUniqueName);
MediaEncodingProfile mEncode = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto);
_isRecording = true;
//Two videos are with SetRecordRotation(value) and
//for two other I commeted out the line.
_camCapture.SetRecordRotation(videoRotation);
await _camCapture.StartRecordToStorageFileAsync(mEncode, _videoRecording);
}
else
{
await _camCapture.StopRecordAsync();
_isRecording = false;
}
}
catch (Exception ex)
{
}
}
Вопрос полностью обновлен с основным вопросом. – Xyroid