Windows Phone 8.1 | Iniciar cámara para previsualización

Supongamos que estamos realizando una aplicació y necesitamos ver lo que estamos enfocando con la cámara ya sea para iniciar una grabación, tomar una foto o simplemente, como en mi caso para hacer una linterna con cámara (Torch8). Dado que ya tenemos disponible el desarrollo para Windows 10 (desktop y mobile) la información escasea acerca de esta temática para la plataforma Windows Phone 8.1 y Windows 8.1, así que he recopilado lo que he encontrado al respecto y os lo condensaré en este artículo.
Seleccionar cámara
Para empezar, debemos seleccionar la cámara del dispositivo dado que podemos tener delantera, trasera o las dos.
// Get all the cameras DeviceInformationCollection cameras = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
// Selecting frotal camera DeviceInformation frontCam = (from webcam in cameras                               where webcam.EnclosureLocation != null                               && webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Front                               select webcam).FirstOrDefault();
// Selecting rear camera DeviceInformation rearCam = (from webcam in cameras                                 where webcam.EnclosureLocation != null                                 && webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back                                 select webcam).FirstOrDefault();

Inicializar parámetros de captura
Una vez tengamos la cámara deseada, tendremos que inicializar la captura de vídeo con los parámetros que necesitemos como por ejemplo el código que muestro a continuación
// Initialize MediaCapture parameters await mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings {     VideoDeviceId = rearCam.Id, // Using rear camera     AudioDeviceId = "", // Don’t capture audio     StreamingCaptureMode = StreamingCaptureMode.Video, // We want to capture video     PhotoCaptureSource = PhotoCaptureSource.VideoPreview // Capture mode (Auto | Photo | VideoPreview)
});

Comenzar a obtener visualización de la cámara
Llegados a este punto, ya podemos visualizar lo que enfoquemos con la cámara en nuestro dispositivo y, para ello necesitamos tener preparado el control en la vista XAML y referenciarlo desde el código C#
XAML

C#
// Set primary use as Video.
mediaCapture.VideoDeviceController.PrimaryUse = Windows.Media.Devices.CaptureUse.Video;
// Set the source of the CaptureElement to your MediaCapture PreviewControl.Source = mediaCapture;
// Start Preview of Video.
await mediaCapture.StartPreviewAsync();
Más información
Toda esta información y podéis encontrarla con mayor profundidad en este enlace de MSDN

Nota Importante
Debeis recordar que es absolutamente necesario liberar los recursos de la cámara al cerrar/suspender la aplicación ya que si no, puede haber conflictos con otras aplicaciones e incluso la nuestra no funcionará como esperamos, para ello, en el enlace que os he puesto tenéis a vuestra dispocisión una muestra de código para limpiar los recursos
public async Task CleanupCaptureResources()
{
if (IsRecording && MediaCapture != null)
{
await MediaCapture.StopRecordAsync();
IsRecording = false;
}
if (IsPreviewing && MediaCapture != null)
{
await MediaCapture.StopPreviewAsync();
IsPreviewing = false;
}

if (MediaCapture != null)
{
if (PreviewElement != null)
{
PreviewElement.Source = null;
}
MediaCapture.Dispose();
}
}
Esta limpieza debéis llevarla a cabo al menos al suspender la aplicación tal y como os copio y pego de la documentación
private async void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();

//cleanup camera resources
await CleanupCaptureResources();

deferral.Complete();
}
No obstante debéis consultar en profundidad la documentación acerca de los estados y el ciclo de vida de las aplicaciones Windows Phone 8.1 o incluso estudiar la posibilidad de manejar la suspensión en la vista tal y como se explica en este artículo de MSDN.

Espero que os sea de ayuda. Enjoy coding!!!