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

videos de youtube

Sabes que me da un error a la hora de guardar los archivos de youtube
como la URL cambio recientemente (watch?=), donde se puede agregar/modificar la url del plugin de youtube para que funcione?
a vos te funciona con youtube?
DOWNLOAD_ERR YOUTUBE An error occured while retrieving the video.

saludos

Error al ejecutar

Hola, seguí todos los pasos que indica el manual, (con algunas modificaciones para CentOS) pero me da error a la hora de reiniciar los servicios y es precisamente en la segunda línea del codigo que se agrega al final en squid.conf (la linea que dice:url_rewrite_program /usr/bin/python /usr/share/videocache/videocache.py) no se en donde está mi error, en realidad cuando reinicie la computadora salio un texto que indicaba error en esa linea, pero no se que es, por si sirve de algo, estoy usando CentOS, pero ya instalé python porque lo estuve revisando, pueden ayudarme por favor, en serio se los agradeceré.

Ejecutar update-vc

Resulta que al ejecutar update-vc para actualizar la información, me da los siguientes errores:

Traceback (most recent call last):
File "/usr/sbin/update-vc", line 360, in ?
update(root)
File "/usr/sbin/update-vc", line 263, in update
if not dir _perms_and_ownership(new_dir, squid_user, squid_group);
File "/usr/sbin/update-vc", line 74, in dir_perms_and_ownership
user = pwd.getpwnam(user)[2]
KeyError: 'getpwnam(): name not found: proxy'

Al parecer tengo problemas con el password y usuario, pero no se de donde saco este dato y dónde exactamente lo escribo en update-vc/
Estoy usando centOS por si sirve de algo. Gracias.

Los archivos quedan en modo texto

Antes que nada pido disculpas si interprete mal el tutorial, imagine que en el link del proxi/videocache en cada carpeta tendria el listado con el video listo para reproducir o descargar, segui al pie de la letra el tutorial pero me encuentro con archivos como 77f733c5379d5e97 que al descargarlo lo puedo abrir en modo texto nomas, por favor si alguien me aclara esa duda se lo agradezco, muy bueno el tutorial

completo mensaje anterior

Los archivos que me quedan con la caracteristica que puse arriba es en youtube, en redtube por ejemplo quedan si los archivos flv, les agradeceria alguna ayuda, tampoco me registra youporn

me corrijo solo y mis disculpas

Por tener a disposicion el foro y no agotar posibilidades no me di cuenta que abre si los archivos de youtube tambien sin problemas, seleccionando el reproductor aunque no lo reconozca abre.

muy bueno el tutorial, muchas gracias

CACHE_FULL YOUTUBE

Imagen de s4muelito

CACHE_FULL YOUTUBE Cache directory '/var/spool/squid/videocache/' has exceeded the maximum size allowed.

por que pasa este problema eh
espero me puedan ayudar gracias

Manejo de threads...

Imagen de chilino

RazaMetal

Cual es el numero de conexiones que te permite manejar el script de VideoCache? Sabias que la version de thunder cache solo te deja 50 sesiones?

Chilino

Páginas