Los streaming típicos son una URL o lista m3u8 donde la app puede reproducir automáticamente el contenido, pero en algunos casos es necesario añadir tokens, procesar datos en algún formato, etc. Y por tanto no es posible reproducirlo directamente dado que requiere que la app tuviese cierta lógica. Pues es en este caso hay diferentes soluciones, ¡veámoslo!
En primer lugar, la app dispone de lógica para realizar búsquedas en la primera llamada. Imaginemos que el servidor envía un archivo JSONP o una web HTML, en la que dentro de mucho código… se encuentra una URL m3u8. La app es capaz de reconocer esta URL e incluso soporta que la URL contenga incluso token si no contiene caracteres extraños en la URL. Una forma rápida de probarlo es usar la opción de “buscar en la web” que tiene la app. Pero… ¿Cómo usamos esto por ejemplo en una lista m3u? Muy fácil, la app reconoce que debe actuar con este modo cuando la URL comienza por “tvonlineuniv://” junto con la URL incluyendo http. Un ejemplo, seria como este: tvonlineuniv://http://midominio.com/path/ En el caso de Windows estas URLs también invocan la app si son lanzadas desde el navegador. En la lista m3u lo reconocen todas las plataformas.
Útil, ¿verdad?
Pero no siempre es posible cubrir las necesidades con este método, por ejemplo, imaginemos que queremos realizar nuestra propia integración de YouTube en vez de usar el integrado en la app. Para tal menester tenemos que realizar una llamada al API de YouTube y en la respuesta procesar para obtener la URL o realizar otra llamada adicional. La app soporta conectarse a un servidor externo de forma que la app realiza las llamadas y pasa la información al servidor externo para que le indique siguiente paso. El primer paso es montar la URL, el cual esta formado por 4 partes, la primera el indicador para que la app actúe con en este modo. La 2º es el identificador para el servidor externo. La 3º parte es la URL a la que la app debe invocar, y en 4º lugar la URL donde enviará la respuesta para que se procese. La separación entre cada campo se utiliza “#”. A continuación, un ejemplo:
URL a la que llamar: https://weboriginal.com/pathvideo
URL servidor: https://miserver.com/path
ID servidor: Id6785
URL plantilla: tvonlineunivext<id servidor>#<url>#<url servidor>
URL final: tvonlineunivextId6785# https://weboriginal.com/pathvideo#https://miserver.com/path
La app una vez que ha hecho la llamada enviará la respuesta al servidor indicado, para ello la respuesta recibida se convierte en base64 y se envía como variable POST “d”. El id para que lo reconozca el servidor se envía como variable POST “m”. De esta forma, es posible usar un esquema MVC en php por ejemplo para que la misma ruta del servidor sirva para múltiples canales.
Una vez que el servidor ha procesado los datos, hay que enviar la respuesta a la app. La respuesta ha de ser en formato JSON y la estructura de los datos es la siguiente:
{
“u”:”url del video”,
“h”:[
{“k”:”user-agent”,
“v”: “App”
}],
“m”: “GET”,
“d”:””
}
La clave “u” es la que contiene la URL a la que debe llamar la app. El método que debe utilizar en la llamada HTTP se indica en “m” con las letras en mayúsculas. Estos pueden ser GET/POST/PUT. En “h” es un array de JSON en la que se encuentran “k” y “v” que son los clave-valor de los headers que debe utilizar. Y, por último, “d” si deseas que tenga la llamada algún payload este debe ser diferente de “”.
Los campos son obligatorios, y se puede volver a concatenar las llamadas si requiere varias iteraciones.
Si tienes más dudas, escríbeme para ayudarte a realizar la integración.