Hacer cache de los videos de youtube y demás con Debian + Squid + Apache2 + Videocache 1.9.2

Imagen de RazaMetaL

Tema: 

Ha algún tiempo publiqué un [url=http://www.ecualug.org/2009/07/11/blog/razametal/limitar_el_consumo_de_ancho_de_banda_de_descarga_de_diferentes_sitios_y_archivos_con_squid]pequeño "joutú"[/url] para limitar la velocidad de descarga de ciertas extensiones y contenido con squid.

Hace unos días he estado probando esta herramienta llamada [url=http://cachevideos.com/]Videocache[/url] que en verdad promete mucho. Con Videocache se pueden almacenar en nuestro servidor los videos de algunos sitios como:

- youtube.com
- googlevideo.com
- metacafe.com
- dailymotion.com
- video.google.com
- vimeo.com
- soapbox.msn.com
- blip.tv
- break.com
- tvuol.uol.com.br
- Red Tube
- X Tube Videos
- You Pron Videos
- Tube8 Videos

Lo he probado durante la última semana y hasta ahora no me puedo quejar de su desempeño y los usuarios tampoco, ya que un video que vió uno y lo compartió por email en cadena a los demás usuarios es visualizado fluido y sin cortes :)

Mas información sobre este aplicación y como ayudar en su crecimiento la pueden encontrar en:
[url]http://cachevideos.com/[/url]

Para poder utilizar Videocache debemos contar con un squid configurado y funcionando, apache2, Python y un par de módulos adicionales.

Instalamos dependencias:

aptitude install python-urlgrabber

Descargarmos e instalamos iniparse:

cd /usr/src
wget http://iniparse.googlecode.com/files/python-iniparse_0.3.1-1_all.deb
dpkg -i python-iniparse_0.3.1-1_all.deb

Descargamos y descomprimimos videocache:

cd /usr/src
wget http://cachevideos.com/sites/default/files/pub/videocache/videocache-1.9.2.tar.gz
tar zvxf videocache-1.9.2.tar.gz

También se puede utilizar GIT:

aptitude install git-core


cd /usr/src
git clone http://git.cachevideos.com/videocache.git
ln -sf /usr/src/videocache videocache-1.9.2

Modificamos las siguientes variables en el archivo instalador de videocache /usr/src/videocache-1.9.2/setup.py

squid_user = 'proxy'
squid_group = 'proxy'
install_dir = '/usr/share/'
apache_conf_dir = '/etc/apache2/conf.d/'

También se deben modificar la misma información en /usr/src/videocache-1.9.2/update-vc

Una vez editado ejecutamos el instalado:

cd /usr/src/videocache-1.9.2
python setup.py install

Creamos una acl en /etc/squid/squid.conf para que el servidor pueda guardar los videos, para ilustrar el ejemplo vamos a suponer que nuestro servidor tiene la ip 192.168.0.1 :

acl proxy src 192.168.0.1 # 192.168.0.1. es la ip de nuestro proxy
http_access allow proxy

Agregamos al final de nuestro /etc/squid/squid.conf :

# --BEGIN-- videocache config for squid
url_rewrite_program /usr/bin/python /usr/share/videocache/videocache.py
url_rewrite_children 10
acl videocache_allow_url url_regex -i \.youtube\.com\/get_video\?
acl videocache_allow_url url_regex -i \.youtube\.com\/videoplayback \.youtube\.com\/videoplay \.youtube\.com\/get_video\?
acl videocache_allow_url url_regex -i \.youtube\.[a-z][a-z]\/videoplayback \.youtube\.[a-z][a-z]\/videoplay \.youtube\.[a-z][a-z]\/get_video\?
acl videocache_allow_url url_regex -i \.googlevideo\.com\/videoplayback \.googlevideo\.com\/videoplay \.googlevideo\.com\/get_video\?
acl videocache_allow_url url_regex -i \.google\.com\/videoplayback \.google\.com\/videoplay \.google\.com\/get_video\?
acl videocache_allow_url url_regex -i \.google\.[a-z][a-z]\/videoplayback \.google\.[a-z][a-z]\/videoplay \.google\.[a-z][a-z]\/get_video\?
acl videocache_allow_url url_regex -i (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/videoplayback\?
acl videocache_allow_url url_regex -i (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/videoplay\?
acl videocache_allow_url url_regex -i (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/get_video\?
acl videocache_allow_url url_regex -i proxy[a-z0-9\-][a-z0-9][a-z0-9][a-z0-9]?\.dailymotion\.com\/
acl videocache_allow_url url_regex -i vid\.akm\.dailymotion\.com\/
acl videocache_allow_url url_regex -i [a-z0-9][0-9a-z][0-9a-z]?[0-9a-z]?[0-9a-z]?\.xtube\.com\/(.*)flv
acl videocache_allow_url url_regex -i bitcast\.vimeo\.com\/vimeo\/videos\/
acl videocache_allow_url url_regex -i va\.wrzuta\.pl\/wa[0-9][0-9][0-9][0-9]?
acl videocache_allow_url url_regex -i \.files\.youporn\.com\/(.*)\/flv\/
acl videocache_allow_url url_regex -i \.msn\.com\.edgesuite\.net\/(.*)\.flv
acl videocache_allow_url url_regex -i media[a-z0-9]?[a-z0-9]?[a-z0-9]?\.tube8\.com\/ mobile[a-z0-9]?[a-z0-9]?[a-z0-9]?\.tube8\.com\/
acl videocache_allow_url url_regex -i \.mais\.uol\.com\.br\/(.*)\.flv
acl videocache_allow_url url_regex -i \.video[a-z0-9]?[a-z0-9]?\.blip\.tv\/(.*)\.(flv|avi|mov|mp3|m4v|mp4|wmv|rm|ram)
acl videocache_allow_url url_regex -i video\.break\.com\/(.*)\.(flv|mp4)
acl videocache_allow_dom dstdomain .mccont.com .metacafe.com .redtube.com .cdn.dailymotion.com
acl videocache_deny_url url_regex -i http:\/\/[a-z][a-z]\.youtube\.com http:\/\/www\.youtube\.com
url_rewrite_access deny videocache_deny_url
url_rewrite_access allow videocache_allow_url
url_rewrite_access allow videocache_allow_dom
redirector_bypass on
# --END-- videocache config for squid

Modificamos en /etc/videocache.conf los parámetros cache_host y proxy para que contengan la IP del servidor proxy, por ejemplo si mi proxy tiene la dirección 192.168.0.1:

cache_host = 192.168.0.1
proxy = http://192.168.0.1:3128/

Luego actualizamos la información con update-vc:

update-vc

Reiniciamos los servicios:

invoque-rc.d squid restart
invoque-rc.d apache2 restart

Ahora si podemos probar mirando un video de youtube (ó porntube si así lo prefieren) en un terminal, y una vez finalizado abrirlo en otros terminales, seguro notarán la diferencia :)

El contenido guardado por videocache podrá ser visto desde:
[url]http://proxy/videocache[/url]

En el log podemos visualizar si un video es visualizado desde el cache o no:

2009-09-27 21:13:04,558 13846 192.168.0.203 7b259975c04da1cb CACHE_MISS YOUTUBE Requested video was not found in cache.
2009-09-27 21:13:04,574 13846 192.168.0.203 7b259975c04da1cb NEW_URL YOUTUBE http://v16.nonxt7.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cburst%2Cfactor&fexp=905303%2C900037&itag=5&ipbits=0&signature=76037D5DCA6ACCCF32F0BD0AC21FF23678B90A3E.99B4C9EC3CBA4555A3E148945C049F36DBF025A4&sver=3&expire=1254128400&key=yt1&factor=1.25&burst=40&id=7b259975c04da1cb&redirect_counter=1

Esto indica que el video no se encuentra en el caché y que va a ser descargado.


2009-09-27 21:08:09,697 13846 192.168.0.204 27399fa5f22ad3ee URL_HIT YOUTUBE http://v19.lscache8.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cburst%2Cfactor&itag=34&ipbits=0&signature=8CDCEEC03501B93F98216A506D8B153615EFDEF4.9833FD05744A1E8F4A54548F4AB0560C1AE45F27&sver=3&expire=1254128400&key=yt1&factor=1.25&burst=40&id=27399fa5f22ad3ee
2009-09-27 21:08:09,697 13846 192.168.0.204 27399fa5f22ad3ee CACHE_HIT YOUTUBE Video was served from cache.

Esto quiere decir que el video esta en el caché y va a ser servido desde ahí.

Si tenemos apache corriendo en un puerto diferente al 80 se debe modificar el parámetro cache_host en /etc/videocache.conf :

cache_host = 192.168.0.1:81

Donde 192.168.0.1 es la ip del servidor y 81 es el puerto en el que esta escuchando apache.

Luego de eso hay que ejecutar para activar los cambios:

update-vc
invoque-rc.d apache2 restart

Comentarios

Servidor proxy

Hola descargue los archivos de video cache que subieron al foro pero no logro instalarlo en mi servidor, tengo un servidor proxy zentyal 3.5 y no logro dar con la instalacion. Lo necesito para el cache de videos ya que squid no lo hace. Gracias.

Describe el error que te da .

Imagen de deathUser

Describe el error que te da ...

El POST original es del 2009 como verás y algunos de los paquetes que requieren los binarios que están disponibles ya no están soportados (eso creo que le pasó a alguien en el hilo si mal no recuerdo) y también las reglas me parece que han cambiado (las de los proveedores de vídeo), con todo, documenta mejor tu error a ver si te podemos ayudar ...

bye
;)

Páginas