Cuando los computadores Atari recién llegaron a Chile, practicamente todos los juegos que se podían encontrar en cassette usaban el famoso cargador del signo de exclamación. Se iniciaba la carga de cassete encendiendo el computador con las teclas OPTION + START presionadas, sonaba un beep, se presionaba una tecla y después de unos 10 segundos sonaban unos 6 «pitos» y aparecía un signo de exclamación en la parte inferior derecha de la pantalla, luego pasaban unos 10 segundos más y comenzaba a sonar la carga del juego en sí, a veces amenizada por alguna simple pantalla de presentación.
Si algo fallaba durante la carga, se debía comenzar desde cero, por lo que toda la ansiedad acumulada durante los varios minutos de carga se veía absolutamente recompensada cuando finalmente aparecía el juego en pantalla. Posteriormente aparecieron mejores sistemas de carga aplicando «turbo» (mayor bitrate) y un mecanismo de recuperación de errores que permitía continuar la carga desde el punto de falla y así no comenzar todo desde cero. Estos sistemas de carga avanzados merecen un artículo propio, lo que vamos a ver acá es el cargador original del signo de exclamación.
Básicamente estos sistemas de carga funcionaban así: Al iniciar el sistema, la tecla OPTION presionada indicaba al sistema operativo del ATARI que desconectara la ROM del lenguaje BASIC (su espacio era ocupado por muchos juegos), y la tecla START indicaba que se quería hacer un boot desde cassette. Cuando el usuario presionaba una tecla después del beep, el sistema operativo del ATARI cargaba un archivo y lo ejecutaba. En el caso de practicamente todos los juegos, este archivo era un cargador un poco más inteligente que se encargaba de cargar el juego en un formato más flexible (XEX). Si vieramos la cinta como un esquema, sería así:
Siempre quise saber exactamente qué hacía el código de este cargador tan simple, y por qué era tan grande (unos 640 bytes). Gracias al usuario AsCrNet de AtariWare que me envió un dump del cargador pude finalmente decodificarlo y ver qué hacía.
Con la publicación de mi artículo sobre cómo simplifiqué el acceso a mi colección de videos y música, tuve varias conversaciones con personas que habían hecho algo similar, y como en los asados, cada uno tiene su propia y «mejor» forma de hacer las cosas.
Para los amigos que aun están en la etapa de ver cómo hacerlo, quiero hacer algunas aclaraciones para ayudarlos a entender mi experiencia y el por qué de algunas decisiones que tomé en la implementación.
Creo que lo primero que conviene saber es qué es lo que ya había probado (y no era suficiente). Por ejemplo muchas de las soluciones que me indicaron del tipo «pero es más fácil si …» eran justamente lo que tenía como punto de partida, y quería mejorar.
Implementación original
Incialmente tenía un Zotac Mag con XBMC conectado a uno de los televisores. Este equipo tenía parte de mi contenido en su disco duro, y el resto lo leía desde una biblioteca compartida en otro PC via red. Este es el equivalente a tener por ejemplo un computador con una biblioteca de iTunes compartida y un AppleTV o un Mac Mini conectado al televisor actuando como reproductor.
Esta solución tiene varios problemas para mis necesidades personales: Uno es que necesitas tener al menos un equipo siempre encendido, en este caso el que comparte la biblioteca (sea iTunes u otro), y si es un Apple, necesitas además tener un reproductor Apple por cada televisor. Si no es Apple, pues es lo mismo que ya tenía con el Zotac Mag. Por otra parte, el contenido del disco del Zotac Mag no podía ser compartido fácilmente.
Mientras tanto, el segundo televisor no tenía nada conectado, y la única forma de acceder al contenido era sacando el disco USB con mi biblioteca para conectarlo directamente al PC. Engorroso si son las 2AM o estás compartiendo un buen momento con otra persona. Ni hablar si eso implicaba copiar archivos o que el televisor no pudiera reproducir los archivos.
Pensé en algún momento conseguir otro equipo como reproductor, pero en el camino y por otros motivos, me hice de un GoogleTV y un AndroidTV, ambos con capacidad de reproducir contenido via DLNA.
Entra el NAS
Para eliminar el equipo que siempre está encendido, fue donde recurrí al NAS. También es un equipo que siempre está encendido pero tiene ventajas bien interesantes: Su consumo de energía es mínimo, es un server puro (no hay capacidad ociosa), y ocupa tan poco espacio que es como si no existiera.
Aca pueden ver una foto del NAS, y para apreciar su reducido tamaño, le puse encima un DigiPass, que es del porte de un llavero.
Tener el NAS es como si mi biblioteca estuviera simplemente «en la red» de mi casa. Es tan pequeño que el router motorola de VTR parece una torre al lado de él. Lo único molesto es su led rojo cuando está encendido, pero se nota sólo si la pieza en donde está tiene todo apagado. Tampoco tiene ventiladores, por lo que es absolutamente silencioso.
Los reproductores
Para la reproducción de video, independiente de que ocupara XBMC, un computador con VLC, un televisor Smart, GoogleTV, Android TV, etc, el denominador común siempre terminó siendo DLNA. Es más, en el televisor Smart sólo enchufas el NAS y te aparece lo que muestra la foto de abajo.
Una de las críticas a mi implementación era que era «muy hacker». Pero las «hackers» de mi casa no tienen mayor problema presionando el botón «input» para seleccionar el NAS.
Acá hay una captura de lo que se ve cuando selecciono el NAS en el televisor.
Por el lado del televisor «no smart», este ya se encontraba conectado a un GoogleTV. Lo único que me costó fue decidir qué aplicación usar para acceder al NAS, y justamente escribir este artículo es para ahorrarles ese tiempo. Basta instalar MediaHouse desde Google Play, seleccionar el NAS y listo, verán las mismas carpetas que se ven en la foto.
Transcodificación
El no poder reproducir el contenido por encontrarse en un formato no procesable por los reproductores es algo que sólo se puede evitar conectando un computador con XBMC o VLC al televisor, en donde la disponibilidad de codecs es infinita. Pero eso es volver al punto de inicio, cuando ya tenía el Zotac Mag con XMBC. Lo mismo sería conectar un Mac Mini o un AppleTV, es volver al punto de inicio del que quería escapar.
La transcodificación tiene sus pro y sus contras. El principal contra es que es un proceso lento, dependiendo del computador puede tomar unos 10 minutos por hora de video.
A su favor tiene varias cosas, sobre todo considerando que el video se transcodifica sólo una vez. Vamos viendo:
El archivo resultante generalmente es más pequeño que el original, dependiendo del bitrate seleccionado. Por ejemplo muchos DVD’s de 4.7GB terminan convertidos en archivos de 500MB con la misma calidad aparente.
Se puede integrar en un solo archivo el video con sus subtítulos, nada de andar con los archivos sueltos por ahí
Muchos de los videos en HD que pululan en la red ya están en el formato correcto (MKV/H.264), no hay que transcodificarlos
El archivo SIEMPRE funcionará en todos los dispositivos. Aquí your mileage may vary porque depende de tus dispositivos.
En mi caso, la mayoría del contenido que estoy moviendo al NAS lo tengo originalmente en DVD, por lo que la transcodificación es INELUDIBLE. Por otro lado, la ganancia en espacio físico es altísima, ya que el CD/DVD se puede descartar una vez transcodificado.
Lo que no se vió
Hay una parte del proceso que quizás confundió a algunos que lo encontraron «muy hacker» y fue la actualización del firmware para instalar Snake OS.
En la realidad, los «complejos» pasos fueron:
Conectar el NAS a la red
Encenderlo
Abrir la página web de administración (como si fuera un router)
Seleccionar el archivo con SnakeOS y darle Aceptar
Esperar a que terminara la instalación y posterior reinicio.
Los costos
La parte de costos no es menos importante. No me gusta llenarme de equipos con capacidades que no voy a usar, y si puedo reutilizar algo que ya tengo, mejor aún. Por otro lado me si voy a gastar en algo, tiene que ser proporcional al uso que le voy a dar. Como a veces le digo a mis amigos, para qué quiero un auto caro si pasará casi todo el tiempo estacionado.
Esto era lo que ya tenía antes de comenzar esta implementación:
1 Televisor con soporte de DLNA
1 Televisor sin soporte de DLNA
1 Google TV enchufado al televisor sin DLNA
1 Disco duro de 500GB que me sobró cuando le cambié el disco al Mac Mini
1 Red Wifi 😛
Estos fueron mis costos en hardware:
1 NAS : USD$40
1 Adaptador para el enchufe : USD$1
Total : USD$41 (unos CLP$20.500)
Mis costos en horas hombre (aproximado):
Actualización del Firmware : 5 minutos considerando lo que tuve que leer
También hay costos del «noviciado» y que se evitarán con este par de artículos sobre el tema. No tengo estimaciones ni tampoco interesa mucho, porque no tendrán que pasar por eso nuevamente:
Reformatear disco NTFS a EXT
Buscar solución al problema de Mac OSX con versiones antiguas de SMB
Probar el codec que funcionara mejor, junto a su configuración
A modo de comparación de costos, aquí están los costos calculados de las alternativas «más fáciles», pero que tenían el pequeño inconveniente de ser iguales a mi problema original, el que ya tenía solucionado:
Alternativa 1:
Time Capsule + 1 Mac Mini por cada televisor, o sea 2 Mac Mini
2 Mac Mini = 2 * CLP$384.000 = CLP$768.000
1 Time Capsule para alojar la biblitoeca (2TB) = CLP$192.000
Costo total sólo en hardware : CLP$960.000
Una diferencia de un 4.800% con el costo de mi implementación.
Alternativa 2:
1 Mac Mini + 1 Apple TV por cada televisor, es decir, 2 Apple TV
2 Apple TV = 2* CLP$76.000 = CLP$152.000
1 Mac Mini = $384.000
Costo total sólo en hardware : CLP$536.000
Una diferencia aproximadamente de 2.600% con el costo de mi implementación.
Además hay que agregar que con un sistema basado en Apple no podría acceder al contenido desde los 2 computadores con Linux que además se usan en la casa, ni los Android’s.
En mi caso personal también podría descontar el Mac Mini, porque hay uno. Pero ni loco lo dejaría encendido 24×7. Aún así la implementación sería un 700% más cara que lo que conseguí finalmente.
Actualización: Agregué un artículo con algunas aclaraciones, describiendo la lógica tras los componentes seleccionados y una comparación de costos con otras alternativas «más fáciles»
Hace unas semanas logré algo que me permitió ordenar todo el contenido de audio y video que he recolectado por años. Como pasa en muchos hogares, la cantidad de contenido y dispositivos para almacenar y reproducir este contendio hace que todo se vuelva un caos.
El problema es que a la larga los videos y música comienzan a quedar repartidos por todos lados, y cuando quieres verlos te tienes que acordar en qué disco o computador se encuentra, copiarlo al computador o disco en donde lo quieres reproducir etc. Un efecto colateral que se produce es que ya no sabes qué es lo que tienes, hay contenido que se va perdiendo entre tanta cosa y fácilmente alguna joyita pude quedar sepultada para siempre.
Por otra parte, no soy de los que les gusta ver videos en el computador. Si tienes un televisor con una buena pantalla, y un buen sistema de sonido, es lo ideal para apreciar en toda su majestad un buen concierto o una buena película. El computador para mí, queda relegado sólo a los «videos/cortos casuales». Entonces el criterio era bien simple: Necesitaba algo que pusiera a mi disposición todo el material audiovisual en mis (2) televisores.
Los reproductores
Uno de los televisores disponibles es un Samsung «no smart» que tiene una entrada de USB para conectar un disco duro o pendrive. El otro televisor es un LG «smart» que tiene eso, además de conexión a internet y lo más importante en este caso: Soporte DLNA. Qué significa? El soporte DLNA permite que un dispositivo pueda reproducir el contenido almacenado en otra parte, en terminos simples esto quiere decir que un televisor con soporte DLNA podrá reproducir contenido (audio/video) que se encuentre almacenado en otro dispositivo a través de la red (WiFi o Ethernet).
Para el televisor sin soporte DLNA tenía una carta bajo la manga: Por mis desarrollos para Android/GoogleTV tenía a mi disposición un AndroidTV y un GoogleTV, cualquiera de los dos conectable al Samsung «no smart». Finalmente deje el GoogleTV conectado al Samsung «no smart» para darle soporte DLNA.
El servidor de contenido
Para almacenar y publicar el contenido contaba con un MiniPC Zotac, pero lo que no me gustaba es que de vez en cuando enciende su ventilador para disipar el calor. No es molesto de día, pero de noche se nota bastante. Por otra parte, encontraba que este computador estaba sobredimensionado para usarlo como un simple servidor, por ejemplo su chip de video nvidia estaría totalmente infrautilizado.
Conversando con mi amigo René Viancos (Renix) de Retronia.cl, quien había hecho algo similar, me recomendó un equipo ultra-económico y de bajo consumo: Se trata del NS-K330. Es un mini computador basado en ARM que está diseñado para actuar como servidor de archivos compartidos via Samba, FTP, HTTP, servidor de impresión y un cliente BitTorrent integrado, para que las descargas no dependan de un computador encendido. Lo mejor de todo: Se puede actualizar el firmware a SnakeOS, un Linux para ARM con soporte de DLNA en donde incluso puedes crear un chroot con Debian y tener acceso a toneladas de software. Para simplificar la lectura, de aquí en adelante a este servidor le llamaremos NAS (Network Attached Storage)
Manos a la obra
Como pueden sospechar, el firmware original del NAS duró los pocos minutos que me tarde en comprobar que el hardware venía bien de fabrica. Al actualizar el firmware sólo tuve que agregar MiniDLNA a lo que SnakeOS incluye por omisión.
El NAS viene sin disco, sólo puertos USB para conectar el disco que uno quiera. Incialmente le puse uno de 500GB con NTFS, que posteriormente dejé como EXT3 por problemas que comentaré más adelante. En este disco SnakeOS creó la partición /opt en donde instala el software adicional empaquetado como archivos opk. Además, y dada mi dependencia con Midnight Commander (mc) para manipular archivos, instalé un chroot con debian en el mismo disco.
Por el lado de los televisores, el LG ya incluye soporte de DLNA por lo que el dispositivo aparece como si fuera una entrada adicional. Al seleccionarlo se puede navegar por las carpetas y reproducir cualquier archivo ahí publicado. En el caso del Samsung, éste fue conectado al GoogleTV y después de explorar varias aplicaciones me quedé con MediaHouse.
Problemas y su solución
En general todo el aparataje funciona bastante bien y obtuve lo que andaba buscando: Desde cualquiera de los dos televisores tengo acceso a toda la música y videos desde una única fuente. Desde los computadores, tengo acceso al NAS via Samba (archivos compartidos de Windows) y ssh en caso de que requiera entrar a picar.
Me tope con 3 problemas que afortundamente pude solucionar. Esta sección puede ahorrar muchos dolores de cabeza a quienes estén en la misma tarea. Los problemas fueron:
Lentitud y mal soporte de NTFS en otros sistemas operativos
Problemas de acceso a las carpetas compartidas
Y lo peor: Problemas de soporte de formatos de video en los televisores.
Vamos a ver…
Sistema de archivos (NTFS vs EXT)
Lo primero que tuve que hacer fue copiar los archivos que tenía en mis computadores al disco del NAS. Para no dar vueltas innecesarias por la red, formateé la unidad con NTFS en donde había «promesa» de ser soportado en los sistemas operativos que ocupo, que son Mac OSX y Linux. Con Linux todo perfecto, acceso de escritura rápido y seguro como es habitual, pero en Mac OSX es un DESASTRE. Tuve que instalar aplicaciones adicionales y peor aún, el disco comenzó a quedar más corrupto que Julio Pereira, y eso ya es mucho decir. Por suerte los primeros archivos estaban respaldados asi que no perdí nada.
Ya que no podía confiar en OSX para escribir en ese disco, decidí conectarlo directamente al NAS y copiar los archivos via red. Lo que comencé a percibir es que la escritura en NTFS en un equipo de poca potencia como el NAS es increíblemente lenta. Finalmente me fui a la segura y dejé el disco con ext3, con eso el rendimiento se aceleró bastante aunque sin llegar a ser espectacular. Dependiendo del volumen de lo que necesito copiar, lo copio via red al NAS o bien conecto el disco a un Linux y copio directamente con ese computador. Intentar EXT en OSX? No, gracias.
Acceso a archivos compartidos
Para acceder a los archivos compartidos se puede usar ssh/scp o bien el protocolo de compartición de archivos de Windows (SMB/Samba). Ambos funcionaron impecable en Linux, gracias al soporte simplificado de ambos protocolos en Nautilus/GNOME. Copiar los archivos es algo tan simple como arrastrarlos de allá para acá como si fueran locales.
Por otro lado, el tan cacareado fácil de usar Mac OSX, dió algunos problemas. Se resistía a conectarse al NAS dando un mensaje de error de que el servidor no está disponible. Cuento corto: Max OSX no soporta versiones antiguas del protocolo, por lo que el procedimiento que debo aplicar cada vez que inicio OSX es:
Tratar de acceder a los archivos para que me tire el error
En una consola, ejecutar el comando: sudo sysctl -w net.smb.fs.kern_deprecatePreXPServers=0
Formato de video / codecs
El principal problema que tuve con los formatos de video y sus codecs es que no todos están soportados en mis reproductores (LG y GoogleTV), por lo que tuve que buscar algo que funcionara bien en ambos. Por otra parte, en algunos casos al adelantar el video éstos se quedaban pegados o en el caso de LG, arrojaba un error de que no podía reproducir el contenido.
Finalmente la combinación perfecta fue: Contenedor MKV, Video H.264, Audio AAC codificado por ffmpeg, Constant bitrate. Para codificar los videos, después de probar varias aplicaciones me quedé con Handbrake.
Con esa combinación logré : Soporte de múltiples streams de Audio en un sólo archivo (ejemplo 2.0 y 5.1), incrustación de subtítulos en el mismo archivo, bajo bitrate y por lo tanto archivos pequeños. La selección del codec de audio se debío a que el codec por omisión en OSX (CoreAudio) se desincronizaba en algunos videos.
Otras alternativas
Por supuesto que este artículo es mi caso particular, que soluciona los problemas que se presentan con mis equipos disponibles. Como dicen por ahí your mileage may vary.
Como dato final, si es que quieren lograr algo similar, tienen múltiples alternativas, lo importante es que cuenten con soporte DLNA de alguna forma, ya sea integrado en el televisor o a través de alguna «cajita» adicional. He visto que ya algunas tiendas venden equipos «AndroidTV» como el de Geniatech, la consola Playstation3 también soporta DLNA, etc. También es opción usar XBMC ya sea conectado al televisor con un mini computador (como el Rapsberry Pi), o en un computador común y corriente.