La clase CameraCaptureUI también es la encargada de la captura de videos desde una aplicación universal de Windows.
Como vimos anteriormente esta componente se la invoca y nos provee la interfaz visual para la captura de videos.
Implementar una aplicación que permita tomar una video con la cámara del dispositivo móvil o web cam y posteriormente la muestre en un control MediaElement.
Como primer paso creamos un nuevo proyecto llamado "Proyecto34" seleccionando desde el menú de opciones del Visual Studio: Archivo -> Nuevo -> Proyecto
La interfaz visual queda definida por el archivo MainPage.xaml que contiene un botón para mostrar la interfaz visual que crea el CameraCaptureUI y un objeto de la clase MediaElement para reproducir posteriormente el video:
<Page
x:Class="Proyecto34.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Proyecto34"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Content="Tomar video"
Click="Button_Click"
HorizontalAlignment="Center"
Grid.Row="0" />
<MediaElement Grid.Row="1"
x:Name="mediaElement1"
AreTransportControlsEnabled="True"
Stretch="Fill"/>
</Grid>
</Page>
Por otro lado tenemos el código C# para lanzar el CameraCaptureUI y tomar el video:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Media.Capture;
using Windows.Media.Core;
using Windows.Media.Editing;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// La plantilla de elemento Página en blanco está documentada en http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace Proyecto34
{
///
/// Página vacía que se puede usar de forma independiente o a la que se puede navegar dentro de un objeto Frame.
///
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
CameraCaptureUI camara1 = new CameraCaptureUI();
camara1.VideoSettings.Format = CameraCaptureUIVideoFormat.Mp4;
StorageFile archivoVideo1 = await camara1.CaptureFileAsync(CameraCaptureUIMode.Video);
if (archivoVideo1 != null)
{
MediaComposition mediaComposition1 = new MediaComposition();
MediaClip mediaClip1 = await MediaClip.CreateFromFileAsync(archivoVideo1);
mediaComposition1.Clips.Add(mediaClip1);
MediaStreamSource mediaStreamSource1 = mediaComposition1.GeneratePreviewMediaStreamSource(
(int)mediaElement1.ActualWidth,
(int)mediaElement1.ActualHeight);
mediaElement1.SetMediaStreamSource(mediaStreamSource1);
}
}
}
}
Los espacios de nombres siguientes son necesarios para capturar un video y luego procesarlo y visualizarlo en un control MediaElement:
using Windows.Media.Capture; using Windows.Media.Core; using Windows.Media.Editing; using Windows.Storage;
El método de presión del botón debe ser asíncrono (async):
private async void Button_Click(object sender, RoutedEventArgs e)
{
...
}
Definimos un objeto llamado camara1 de la clase CameraCaptureUI:
CameraCaptureUI camara1 = new CameraCaptureUI();
Definimos el formato de archivo a generar (En este ejemplo Mp4):
camara1.VideoSettings.Format = CameraCaptureUIVideoFormat.Mp4;
Llamamos al método CaptureFileAsync y le pasamos en el parámetro que muestre la interfaz para la captura de video:
StorageFile archivoVideo1 = await camara1.CaptureFileAsync(CameraCaptureUIMode.Video);
En este momento se visualiza la interfaz CameraCaptureUI para tomar el video:

Luego de haber capturado el video si se presiona el botón de aceptar el if siguiente se verifica verdadero:
if (archivoVideo1 != null)
{
Definimos un objeto de la clase MediaComposition:
MediaComposition mediaComposition1 = new MediaComposition();
También creamos un objeto de la clase MediaClip pasando como parámetro el objeto de la clase StorageFile que contiene el video propiamente dicho:
MediaClip mediaClip1 = await MediaClip.CreateFromFileAsync(archivoVideo1);
Añadimos el objeto de la clase MediaClip al objeto MediaComposition:
mediaComposition1.Clips.Add(mediaClip1);
Definimos el ancho y alto del video:
MediaStreamSource mediaStreamSource1 = mediaComposition1.GeneratePreviewMediaStreamSource(
(int)mediaElement1.ActualWidth,
(int)mediaElement1.ActualHeight);
Enlazamos el video definitivo con el control visual MediaElement que tiene por objeto mostrar el video en pantalla:
mediaElement1.SetMediaStreamSource(mediaStreamSource1);
Este proyecto lo puede descargar en un zip desde este enlace :Proyecto34.zip