Twitter Facebook RSS Feed

lunes, 29 de julio de 2019 a las 14:41hs por Gustavo Cantero (The Wolf)

Xamarin Forms nos ayuda mucho a compartir código en las distintas plataformas que soporta: Android, iOS, MacOS, UWP, etc., pero algunas cosas hay que hacerlas, a través de .NET, en cada una de estas plataformas, como es el caso de la reproducción de vídeos.
Si seguimos el ejemplo que encontramos en la documentación de Microsoft (Reproducción de un vídeo web – Xamarin) vamos a notar que hay mucho código en Xamarin Forms, pero finalmente lo que hace es, en el caso de Android, utilizar el widget VideoView, y en iOS utilizar el objeto AVPlayer.
Con esto funciona perfecto el ejemplo, el cual se puede bajar de este link: Video Player Demos, pero… ¿Qué pasa cuando los vídeos están protegidos, como en cualquier red social o aplicación web? En ese caso debemos enviar nuestro token en el header de la petición web, para que el servidor que la recibe pueda validar la petición y devolver el vídeo. Para poder hacer esto agregamos unas pocas lineas al ejemplo.

Android

En Android modificamos el método SetSource de la clase VideoPlayerRenderer y le agregamos lo siguiente:

...
void SetSource()
{
    ...
    if (Element.Source is UriVideoSource)
    {
        string uri = (Element.Source as UriVideoSource).Uri;

        if (!String.IsNullOrWhiteSpace(uri))
        {
            var headers = new Dictionary<string, string>();
            headers.Add("TOKEN", "ACÁ VA EL TOKEN DEL USUARIO");
            videoView.SetVideoURI(Android.Net.Uri.Parse(uri), headers);
            hasSetSource = true;
        }
    }
    ...
}
...

Obviamente el string «TOKEN» puede variar según nuestra implementación.

iOS

En iOS modificamos el mismo método, pero utilizando objetos de esta plataforma:

...
void SetSource()
{
    ...
    if (Element.Source is UriVideoSource)
    {
        string uri = (Element.Source as UriVideoSource).Uri;

        if (!String.IsNullOrWhiteSpace(uri))
        {
            using (var headers = new NSMutableDictionary())
            {
                headers.SetValueForKey(new NSString("ACÁ VA EL TOKEN DEL USUARIO"), new NSString("TOKEN"));
                using (var dict = new NSDictionary("AVURLAssetHTTPHeaderFieldsKey", headers))
                    asset = AVUrlAsset.Create(new NSUrl(uri), new AVUrlAssetOptions(dict));
            }
        }
    }
    ...
}
...

Conclusión

No es gran cosa, pero con estas pocas líneas podemos hacer que nuestra aplicación reproduzca vídeos que están protegidos por un token.
Espero les sirva.
¡Suerte!

0 comentarios »

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.