2015-05-01 1 views
1

Приложение для Windows Phone должно записывать видео с передней камеры и отправлять его на сервер через веб-сервис.запись видео с передней камеры - WP8 - C#

Здесь, когда я пытаюсь записывать видео с front-camera, я получаю mirror inverted video. Средство видеозаписи с фронтальной камерой поворачивается на 180 градусов.

, что, по моему мнению, единственным решением является поворот записанного видеопотока на 180 градусов назад.

Вопрос:

  • есть ли другое решение для записи надлежащего видео по передней камере в wp8?
  • если нет, то как повернуть видеопоток 180 градусов? любой c# API для этого ..?

Edit:

Вот код, который я использую:

XAML код VideoBrush

<Canvas x:Name="CanvasLayoutRoot" RenderTransformOrigin="0.5 0.5" 
      Width="{Binding ActualHeight, ElementName=LayoutRoot}" 
      Height="{Binding ActualWidth, ElementName=LayoutRoot}" 
      Margin="-160 0 0 0"> 
     <!--Background="Transparent"--> 

     <Canvas.Background> 
      <VideoBrush x:Name="videoBrush" /> 
     </Canvas.Background> 
     <Canvas.RenderTransform> 
      <RotateTransform x:Name="rt" /> 
     </Canvas.RenderTransform> 

    </Canvas> 

Initializing Camera

public async void InitializeVideoRecorder() 
    { 
     try 
     { 
      if (videoCapture == null) 
      { 
       // below line of code will detect if "Front Camera" is available or not 
       // if availble, then open it or it will open "Back Camera" 

       videoCapture = await AudioVideoCaptureDevice.OpenAsync(
        AudioVideoCaptureDevice.AvailableSensorLocations.Contains(CameraSensorLocation.Front) ? CameraSensorLocation.Front : CameraSensorLocation.Back, 
        new Windows.Foundation.Size(640, 480)); 

       videoCapture.RecordingFailed += videoCapture_RecordingFailed; 

       videoCapture.SetProperty(KnownCameraGeneralProperties.EncodeWithOrientation, videoCapture.SensorRotationInDegrees); 

       // Initialize the camera if it exists on the phone. 
       if (videoCapture != null) 
       { 
        videoBrush.SetSource(videoCapture); 
        if (!AudioVideoCaptureDevice.AvailableSensorLocations.Contains(CameraSensorLocation.Front)) 
        { 
         rt.Angle = videoCapture.SensorRotationInDegrees; 
        } 
        else 
        { 
         rt.Angle = -(videoCapture.SensorRotationInDegrees); 
        } 
       } 
       else 
       { 
        MessageBox.Show("Unable to load Camera. Please try again later.", App.appName, MessageBoxButton.OK); 
        NavigationService.GoBack(); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      (new WebServices()).catchExceptions(ex); 
      NavigationService.GoBack(); 
     } 
    } 

Начиная VideoCapture

private async Task StartVideoRecording() 
    { 
     try 
     { 
      // Gets the application data folder 
      StorageFolder applicationFolder = ApplicationData.Current.LocalFolder; 
      StorageFolder transfersFolder = await (await applicationFolder.GetFolderAsync("Shared")).GetFolderAsync("Transfers"); 

      // Create the file specified in the application data folder 
      videoFileName = selectedQue.response.template_id + "_" + selectedQue.response.id + "_" + selectedQue.response.invite_id +".mp4"; 
      StorageFile storageFile = await transfersFolder.CreateFileAsync(videoFileName, CreationCollisionOption.ReplaceExisting); 

      // Open a file stream, ready to write video data 
      randomAccessStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite); 

      // Video recording to the specified stream 
      await videoCapture.StartRecordingToStreamAsync(randomAccessStream); 
      isRecordingStarted = true; 

      //timer = "0:00"; 
      tbTimer.Text = "0:00"; 
      dt.Start(); 
     } 
     catch (Exception ex) 
     { 
      (new WebServices()).catchExceptions(ex); 
     } 
    } 
+0

Это в портретном режиме или в ландшафтном режиме? Возможно, вы могли бы обновить свой вопрос, включив соответствующий код, который воспроизводит проблему? –

+0

@RowlandShaw Я добавил код. на самом деле я хочу его в портретном режиме. –

ответ

0

И наконец, я решил проблему после 24 часов усилий с помощью решения ниже.

Ниже приведена строка кода, вызывающая проблему с помощью вращающегося видео.

videoCapture.SetProperty(KnownCameraGeneralProperties.EncodeWithOrientation, videoCapture.SensorRotationInDegrees); 

здесь VideoCapture является объектом AudioVideoCaptureDevice

При использовании передней камеры, мы должны инвертировать вращение cameraSensor.

Таким образом, я использовал вышеуказанный код (упомянутый в вопросе) с одной крошечной модификацией в этой строке videoCapture.SetProperty. правильная строка кода приведена ниже.

videoCapture.SetProperty(KnownCameraGeneralProperties.EncodeWithOrientation, -(videoCapture.SensorRotationInDegrees)); 

Я просто перевернул videoCapture.SensorRotationInDegrees, добавив один знак минус (-) перед ним.

Надеюсь, это поможет всем ..

0

Это работает для меня в прошлом, это было просто приложение сканер штрих-кода, который я закодированы до выполнения функционального требования. Я положил преобразование на <VideoBrush>.

<Grid x:Name="ContentPanel" Margin="12,0,12,0"> 
    <Canvas x:Name="cam_canvas" Width="480" Height="480">     
     <Canvas.Background> 
      <VideoBrush x:Name="cam_video_brush" Stretch="None"> 
       <VideoBrush.RelativeTransform> 
        <CompositeTransform Rotation="90" CenterX="0.5" CenterY="0.5" /> 
       </VideoBrush.RelativeTransform> 
      </VideoBrush> 
     </Canvas.Background> 
    </Canvas> 
</Grid> 
+0

спасибо за ваши вклады .. Я пробовал это, но не помог ..! все еще снято видео с помощью функции «Front-Camera» (повернуто на 180 градусов) ..! любое другое решение о том, как повернуть поток любого видео. –

 Смежные вопросы

  • Нет связанных вопросов^_^