DVR.



indice.png

Curriculum

Ensayos

Recursos



nav.png

Principal
Arriba

Convirtiendo un beige mac en un DVR.


Después de haber cambiado a un Dual G5, decidí conservar al viejo beige mac debido a que este equipo tenia floppy, Zip, puertos seriales, SCSI y ademas podía arrancar con MacOS 9, sin embargo quería seguir usandolo y no simplemente guardarlo, entonces decidí convertir al mac en un DVR, esto era mas fácil ya que la maquina había sido mejorada con varios ‘updates’:

  • G4 533Mhz
  • 288MB
  • 40GB en disco
  • Tarjeta Firewire 400
  • Tarjeta USB-1
  • Adaptador VGA
  • Combo DVD/CD-RW

Solo el disco parecía muy poco, por lo que un cambio a un disco de 80GB fue lo adecuado, usando XPostFacto es posible correr 10.3.

Como programa de captura estaba pensando en HackTV Carbon, un programa de ejemplo de Apple, este programa sin embargo tenia dos deficiencias:
  • No renombra automáticamente el nombre de los archivos de captura
  • No tiene acceso con Applescript

Como hardware de captura empece probando una videocámara mini-DV, utilizando la conexión Firewire, usando HackTV grabando en formato DV (720x480) se usa 12GB/hora, similar a lo que iMovie usa.

Probando diferentes formatos de compresión al final decidí usar MPEG-4 para vídeo y AAC para audio, el codec 3ivx dio los mejores resultados, con un tamaño de 320x240 se crea vídeo comparable a VHS y se usa cerca de 700MB/hora.

Como alternativa al uso de la videocámara, compre un adaptador XLR8 Interview 3.0, el cual es un dispositivo USB-1, el cual captura vídeo, pero no audio, en este caso se debe usar la entrada de audio-in para capturar el sonido. Este dispositivo captura a 320x240 que es el tamaño que quería.

El XLR8 viene con un programa llamado USBVision, este programa parece ser una versión extendida de HackTV, de hecho comparte las preferencias, y soluciona los dos problemas anteriormente nombrados de HackTV, es posible controlar la grabación con Applescript y tiene la opción de renombrar automáticamente los archivos de captura.

A pesar del nombre, USBVision también puede capturar desde la videocámara usando Firewire, otra razón para pensar que esta basado en HackTV. Como codec de captura el programa trae un codec llamado también USBVision, usando este codec se usa 4GB/hora.

Como ahora el mac va a ser usado con una TV, añadí una caja AVerKey100 Pro, la cual convierte la salida VGA en Composite Video o S-Video. Encontré el programa cscreen que permite cambiar la resolución a 640x480, la cual se ve bien en TV.

Revisando información en el internet acerca de similares sistemas encontré a MythTV, el cual es un sistema mucho mas ambicioso que lo que yo quería, sin embargo había un link acerca de como controlar una caja de DirecTV usando una conexión serial, ya que soy subscriptor de DirecTV, decidí probar el programa llamado Sony.pl, prefiriendo Python a Perl, convertí al programa en uno llamado setDTV.py.

Una vez armado todos los dispositivos se tiene:


Para la videocámara, solo se conecta al Firewire en lugar del USB y no se necesita la entrada Audio-In.

Mi caja DirecTV usa un conector estandart DB-9 para la entrada serial, por lo que use un adaptador mini DIN a DB-9:


Al comienzo usé unos pocos applets para controlar la grabación, era necesario poner al applet como un Programa de Arranque y luego ajustar la hora a la cual se prendería el mac, era obviamente una gran cantidad de trabajo manual, por lo que decidí crear un programa para controlar usando Applescript a los demas programas.

Decidí crear el programa con Applescript Studio, siendo también una oportunidad para aprenderlo, ya que era la primera vez que usaba este ambiente, aunque claro ya tenia experiencia con simples applets creados con Script Editor.

Una extra objetivo era tratar de prender y apagar los equipos (mac y DirecTV) automáticamente, ya que el mac usa cerca de 40W, y el DirecTV como 24W, es claro que no necesito mantenerlos siempre activos, ninguno de los dos equipos tiene una modalidad de ‘sleep’ que podría haber sido la alternativa. Para esto conecte un cable a la salida de poder del monitor del mac, y a esta conecte el adaptador de poder de la caja AverKey y un enchufe extra para conectar la caja DirecTV, por tanto ahora cada vez que se prende el mac, prende ademas a los dos cajas.

Revisando la documentación de Apple, cree un programa llamado powerOn para encolar la prendida automática del mac y las dos cajas.

El programa TV Cron, pues maneja a:
  • USBVision, para capturar video
  • cscreen, para cambiar la resolución a 640x480
  • powerOn (a través de un shell script setPowerOn) para encolar la prendida automática del mac.
  • setDTV.py, para cambiar canales del DirecTV
  • date (a través de un shell script setDate) para sincronizar la hora

Se usa dos shell scripts, setPowerOn y setDate, debido a que se debe usar un password administrativo para correr powerOn y date, en los shell se debe poner este password, estos programas deben copiarse a /usr/local/bin en donde están protegidos por la protección del directorio, evitando tener que poner el password en el programa principal, lo cual seria un riesgo mayor de seguridad.

Los otros programas, cscreen, powerOn y setDTV.py también deben copiarse al directorio /usr/local/bin, el programa espera encontrarlos en ese directorio.

Al final el programa TV Cron efectúa:
  • al arranque, cambio de resolución del monitor usando cscreen, a 640x480 para poder leer la salida en la TV usando la caja AverKey
  • al arranque, carga desde Preferences una tabla con dateTime, task, channel y repeat, ordenada por dateTime
  • al arranque si el flagDirecTV es verdadero, sincroniza el reloj del mac con el del DirecTV usando setDTV.py
  • usa un timer de 15 segundos para procesar los eventos
  • si el flagDirecTV es verdadero, cambia canales de DirecTV usando setDTV.py
  • activa/desactiva captura usando programa "USBVision Capture"
  • recarga los eventos repetitivos a la siguiente oportunidad
  • cuando hay un cambio, guarde en Preferences
  • si no hay actividad en 2 minutos, apague el equipo
  • cuando termine, use powerOn para encolar el siguiente prendido automático en el mac

Y solo se necesita cerca de 900 lineas para lograr los 10 objetivos!

Pero adicionalmente se debe poder editar los archivos capturados, ademas encontré un problema al comprimir los archivos, el sonido se desincronizaba cerca de un segundo cada hora, esto dio lugar a un grupo de applescripts, para ser usados desde el Script Menu con QuickTime Player Pro, los que mas uso son:
  • split, permite cortar la movie en la posición actual, se crea un archivo nuevo al comienzo
  • split rest, similar a split, pero el archivo nuevo es el resto
  • set interval, permite marca inicio/fin de selección, me es mas fácil usar este script que los diminutos controles de QT Player
  • sync sound auto, para resincronizar el sonido
  • merge folder, para unir varios archivos .mov

Ademas dos applets:
  • comp files&halt, comprime archivos y luego apaga la maquina (usando cron)
  • stop halt, cancela el apagado del mac

Estos dos últimos, son usados mientras decido como incorporar compresión dentro de TV Cron, en pruebas aparentemente se puede capturar mientras simultáneamente se comprime, a pesar de que el mac solo tiene 533MHz.




N.B.: Los gráficos de esta pagina fueron creados usando SqueakLand.org, el cual es un paquete pre-cargado de Squeak para uso de escuelas, se usa como una aplicación normal, publicando proyectos (archivos con extensión .pr) localmente o en la red, ademas de herramientas de dibujo y presentación viene con una forma de programar gráfica llamada EToys, útil para enseñar programación a niños.