Página 1 de 1

duda sobre cache..

MensagemEnviado: Sáb Abr 09, 2016 9:40 pm
por piojacinto
bueno hace un tiempo que me pase a MK hara un año o menos.. pero.. ahora quiero implementar un cache de youtube... no encontre nada concreto.. con brazil version 3 puedo cachear youtube y demas web de contenido dinamico=? junto con MK..

desde ya gracias.

Re: duda sobre cache..

MensagemEnviado: Sáb Abr 09, 2016 11:00 pm
por Lenobare
Youtube es https y ser almacenado en caché , debe desarrollar un complemento para este procedimiento .
Estamos discutiendo este tema para llegar a una solución

Re: duda sobre cache..

MensagemEnviado: Qua Abr 13, 2016 3:47 pm
por piojacinto
y digamos en paginas como www.pelispedia.tv cachea normalmente o hay que hacer algo? y es funcional junto con mikrotik? osea lo puedo poner como al thunder cache junto con una rb1100x2 sin problemas?? no cachea solo lo que es https?

Re: duda sobre cache..

MensagemEnviado: Dom Jun 19, 2016 3:26 pm
por iasimov
Saludos amigos,

Una posible idea para habilitar caché a youtube sería la siguiente, a ver qué os parece:

https://github.com/rg3/youtube-dl es un software opensource para descargar vídeos de youtube desde la línea de comandos de linux,
pues bien, imaginad que en cada WISP se habilita un servidor web HTTP con una interfaz de usuario parecida a youtube, sin la parte social de youtube, unicamente para el visionado de videos utilizando youtube-dl para descargarlos y mostrandolos en un .php utilizando HTML+CSS, ya que con youtube-dl se pueden descargar los videos directamente en formato .mp4 que es compatible con todos los navegadores modernos.
Además se podría añadir un par de opciones que a la mayoría de usuarios les suele interesar como son: 1) Descargar videos de youtube, 2) Descargar el audio de los videos (para canciones etc).

Con la opción "-j" de youtube-dl se puede obtener un fichero JSON con las urls directas para descargar el mp4 de cada video, y con .php es facil leer el json, descargar el mp4, y retransmitirlo al vuelo usando curl.

Es decir, la idea en resumen sería hacer una interfaz web sencilla para utilizar el software open source ya existente de "youtube-dl".

Copio un ejemplo de codigo PHP para la idea mencionada.

Es sólo una prueba, si alguien no entiende alguna línea de código sólo tiene que preguntar.

Para que funcione tiene que estar instalado "youtube-dl" (en ubuntu: apt-get install youtube-dl), php, curl y cualquier servidor web que soporte php (apache, lighttpd, etc).

Si por ejemplo el codigo se pone con el nombre "ver.php" en el server http local, para ver un video de youtube sería...
El video de youtube: youtube.com / watch?v=6sOpbRL8R4g
Tendría la url http://127.0.0.1/ver.php?v=6sOpbRL8R4g

Obviamente con esto solamente no es muy usable youtube, pero sólo es una prueba para que se entienda la idea de cuál podría ser la solución a seguir usando youtube por HTTP.

El script envia los datos del vídeo "al vuelo", es decir, no guarda nada en el disco duro (de eso debe encargarse el proxy cache que se utilice), y si el navegador pide una posición avanzada de un vídeo largo, el script pide esa posición en concreto (en lugar de todo el vídeo).

Igual que se ha hecho el script para el video, se puede hacer otro para las búsquedas/resultados, para el autocomplete de la barra de búsqueda (usando jQuery por ejemplo), etc...

Lo bueno de hacer algo así, además de que se pueda cachear, es que también se puede eliminar la publicidad de los vídeos, ofrecer la posibilidad de descargar videos/audios desde la web al usuario, y personalizar la página de inicio de los videos con los que quiera el admin.

Y repito, sólo es una prueba, no es para usar en modo producción.

Esta idea también puede usarse para otras webs/servicios (cada cual con su complejidad de implementación) que utilicen cifrado, el cifrado no se puede romper, la idea es que el ISP haga de gateway ofreciendo a sus usuarios el mismo servicio sin cifrado y accediendo el ISP al servicio cifrado, de forma automática.
Por ejemplo, imaginad que una empresa quiere monitorear los mensajes whatsapp de sus empleados. El cifrado de whatsapp no se puede romper, pero la empresa puede hacer un servidor gateway que entre a whatsapp y sirva el contenido de la conexion sin cifrado a sus usuarios, prohibiendo el acceso a la versión cifrada y facilitando un .apk con el programa que acceda a la versión sin cifrado (el código del cliente de Telegram, software similar a Whatsapp, es open source).

Copio el código PHP del ejemplo de vídeos en youtube.

Código: Selecionar todos
<?PHP

header("Accept-Ranges: bytes");

$id = $_GET['v'];

$yt_info = yt_json($id);
if ($yt_info==false) exit(0);

$video_url = yt_get_mp4($yt_info);
if ($video_url==false) exit(0);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $video_url);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, "curl_header_func");
if (isset($_SERVER["HTTP_RANGE"]) && substr($_SERVER["HTTP_RANGE"], 0, 6)=="bytes=")
    curl_setopt($ch, CURLOPT_RANGE, substr($_SERVER["HTTP_RANGE"], 6));

curl_exec($ch);

function yt_json($id) {
    if (!yt_id_valid($id)) return false;
    $res = pipeopen("youtube-dl -j https://www.youtube.com/watch?v=".$id);
    $res_json = json_decode($res, true);
    if ($res_json==NULL) return false;
    return $res_json;
}

function yt_id_valid($id) {
    return strlen($id)==11 && preg_match('/^[a-zA-Z0-9_\-]+$/', $id);
}

function pipeopen($ruta) {
    $fp = popen($ruta, "r");
    while(!feof($fp))
        $res .= fread($fp, 1024);
    fclose($fp);
    return $res;
}

function yt_get_mp4(&$yt_info) {
    $url = false;
    foreach ($yt_info["formats"] as $format)
        if ($format["ext"]=="mp4")
            $url = $format["url"];
    return $url;
}

function curl_header_func($ch, $header_line) {
    $valid_headers = array("http/1.1 206", "content-type: ", "content-range: ", "content-length: ");
    foreach ($valid_headers as $valid_header) {
        if (str_cmpi_start($valid_header, $header_line)) {
            header($header_line);
            break;
        }
    }
    return strlen($header_line);
}

function str_cmpi_start($str1, $str2) {
    return strlen($str2)>=strlen($str1) && $str1==strtolower(substr($str2, 0, strlen($str1)));
}

?>