Transcoding de video en tiempo real

chromecast_tips_header

Hoy quiero hablarles de un proyecto que acabo de terminar y que, espero, les sirva a más de uno para usarlo, mejorarlo, etc.

Como feliz poseedor de un chromecast me he dado cuenta de la cantidad de formatos de video que hay disponibles en internet y de los pocos que acepta este excelente aparato. Y como desarrollador Android tenía que hacer algo al respecto. A día de hoy hay muchas apps que permiten pasar un video no compatible (por ejemplo FLV) y transmitirlo en tiempo real a chromecast. Pero claro, todas estas soluciones son de código cerrado y, en el mejor de los casos, ofuscado para que no podamos usmear nada para hacer nuestra propia app que haga algo similar.

Buscando por las entrañas de github, xda, etc, no he encontrada nada abierto que nos ejemplifique como aprovecharnos de las distintas herramientas libres que hay para realizar esta tarea. Es más, he visto que es un gran solicitado en sitios de “freelanceo” porque realmente la tendencia es que el multimedia aporta mucho y, con cosas como chromecast y apple tv, transmitir nuestros contenidos a la pantalla remota es esencial.

Entonces lo que libero es un ejemplo funcional de cómo coger una url de un video incompatible (en el ejemplo es un flv) y servirlo en tiempo real mediante un webserver (nanohttpd) convirtiéndolo con ffmpeg.

La app propiamente dicha no conecta con chromecast porque no es la idea que sea una app independiente sino que sirva de ejemplo para poder hacer nuestras propias apps de multimedia que aprovechen el ejemplo para servir el contenido a sus propias soluciones de cast. Aprovecho para recomendar Connect SDK (https://github.com/ConnectSDK/) que nos permite en una única librería transmitir contenido a Chromecast, apple tv, fire tv o, incluso, varias smart tv compatibles. Está un poco buguienta pero se puede mejorar y usarla fácilmente.

Entonces vamos al lío. Acá está la librería https://github.com/munix/FFmpeg-Transcoding-To-Chromecast

¿Cómo funciona?

La verdad que es bastante sencillo. Primero que nada tenemos en el directorio assets el binario de ffmpeg compilado para android (en este caso está compilado para arquitectura armv7a-neon). Al arrancar la app copia el binario dentro de nuestro directorio sandboxeado de la app y le da permisos de ejecución. Luego arrancamos el webserver en el puerto 8080 (se puede cambiar, claro) y obtenemos nuestra ip local para saber la url con la que vamos a servir. Lo siguiente es decirle al webserver mediante un método setUrl cual va a ser la url no compatible que servirá “transcodeada”

Entonces, en mi caso, he montado la url en http://IP:8080/stream. El webserver al recibir una petición a esta url lanza mediante ProcessBuilder el comando que llama a ffmpeg con los parámetros para encodear el video. La salida, por fortuna, es un InputStream que es justo lo que nefcesita NanoHTTPD para servir su respuesta. El resto es coser y cantar porque simplemente formamos la respuesta con algunas headers como Connection: keep-alive,  Transfer-Encoding: chunked y el mime a video/mkv para decirle al que lo reciba que se quede conectado y recibiendo trozos y trozos del video para consumir. De esta manera logramos algo como un streaming porque sino tendríamos que darle el content-lenght y se nos jode lo del tiempo real porque tendríamos que codificar el video, escribirlo a disco, leerlo y escribirlo en la salida de la respuesta… no mola.

Y básicamente eso es todo. Tanto secreto para algo tan simple. Espero que os sea de utilidad

 

 

Hola, Argentina!

Odio hablar de la política de mi patria pero es el momento de darse cuenta que ni Macri ni el Scioli van a cambiar el país. No estoy para nada a favor con el oficialismo ni con la oposición. Estoy desencantado, astiado y aburrido de la clase política Argentina. No soy el más indicado para hablar porque vivo fuera del país pero a la vez creo que he visto algo más de mundo para saber que a Argentina le quedan muchos años para madurar política, social y culturalmente. Somos un país de ególatras cancheros que nos creemos el ombligo del mundo y no somos más que un grano de adolescente en un mundo algo más maduro. Cuando en argentina se debiera estar hablando de futuro (I+D, infraestructuras para una evolución acelerada de la población, ciudades verdes, bienestar social, educación de calidad orientada a la realidad mundial, las nuevas tecnologías, etc) seguimos hablando de dólares, de proyectos de medio pelo, de mediocres obras para contentar pequeños nichos de posibles y fieles votantes, de peleitas con los “imperios” y toda la sarta de boludeces que se promueven en las abusivas cadenas nacionales. Seguimos escuchando los discursos de siempre,viendo las mismas putas caras de siempre. Y mientras un pequeño porcentaje de chantas e hijos de puta se reparten el verdadero pastel a nosotros nos dejan las migas, pero nos hemos hecho tan lerdos y maleables que seguimos creyendo que a lo largo de la restitución de la democracia lo mejor que le ha pasado a la argentina es la mafia de los Kirchner. Si, claro, han habido cosas buenas, no lo pongo en duda, pero de ahí a creer que este camino debe continuar es un error. No digo tampoco que Macri sea el cambio que estamos esperando, no señor. Pero es hora de cerrar un capítulo nauseabundo de la historia del país. Es hora de que apaguemos la cadena nacional, dejemos de escuchar a los pelotudos como Rial y esa mierda que no es más que incultura , nos quitemos la venda de los ojos y empecemos a leer, a formarnos verdaderas opiniones, a profundizar en el pensamiento propio que, acertado o erróneo, siempre va a ser mejor que uno infundido mediante mensaje triunfalista de década ganada, de bienestar, de igualdad que en el fondo no es más que el resultado de la mella cerebral, de la ignorancia de una sociedad.


Así que este ballotage vayamos a votar con cabeza. Ya sea a Scioli o Macri, al que votemos, lo hagamos con la convicción y con un motivo propio y loable y no porque haya una masa tirando para un lado o para el otro. Leamos. Estamos en el era de la información, podemos buscar, indagar todo lo que haga falta, podemos mirar propuestas, mirar el pasado y de ahí en adelante decidir que queremos para el futuro. Dejemos de mirar el choripan mientras echamos una papeleta por el futuro de una gran nación y centremos la mirada en lo que estamos haciendo y por qué. Es hora de pensar, argentinos. Aprovechemos que es gratis.

Prensa Española para Android

 

Hoy os voy a presentar mi última aplicación. Después de estar algunos meses trabajando en la nueva aplicación de minube para android me he quedado con el gustito de las apps y me he puesto finalmente a hacer las propias. Y he empezado con aplicaciones de prensa. Evidentemente la aplicación es igual pero de distintas temáticas. Pero la que más fe le tengo es la de prensa española. Es una gran aplicación que recoge los mejores periódicos de España y que nos permite leer cada día las últimas noticias del ámbito español.

La aplicación surge de una necesidad propia de leer la prensa en el metro y, a la vez, de estar harto de las apps que sólo son un listado de webs móviles. Es por esto que decidí ir un paso más allá y hacer una aplicación nativa que muestre lo mejor de la prensa de una manera sencilla y fácil de leer, con un internfaz limpio, unificado y sencillo de usar.

Básicamente la aplicación se compone de un listado principal donde encontraremos los periódicos que están disponibles. Pinchando en cada uno, veremos la sección principal. A su vez cada periódico está dividido en las secciones propias y, finalmente, tenemos los artículos con sus fotos y todo lo necesario para hacer la experiencia de lectura algo cómodo y sencillo.

Cada vez que se añaden nuevos periódicos a la aplicación no es necesario actualizar porque ella misma comprueba y descarga las nuevas fuentes. De esta manera el usuario no tiene que hacer nada para disfrutar cada cierto tiempo de nuevos periódicos añadidos.

Como último dato, tengo que comentar que la aplicación guarda temporalmente las noticias de las categorías visitadas, para que podamos disfrutarlas 100% offline mientras no tengamos internet.

Los periódicos disponibles actualmente son:

– El País
– El Mundo
– 20 Minutos
– As
– Marca
– El Economista
– ABC
– La Voz de Galicia
– Diario de León

Lamentablemente por temas de propiedad intelectual la app ha tenido que ser borrada

 

Tutoriales sobre desarrollo Android en Español

Voy a empezar a escribir artículos sobre desarrollo para Android completamente en Español. Mi idea es llegar a esos temas que sólo se encuentran en inglés y que a veces son complicados de encontrar o no son tan amenos de leer para las personas que no dominan el inglés.

No voy a escribirlos en este blog sino que lo haré a través del blog de desarrolladores de minube. De momento ya van dos artículos escritos y la idea es publicar uno cada semana o cada dos (o cada vez que pueda o tenga un tema interesante).

Si quieres puedes seguirlo a través de la categoría correspondiente en el blog pinchando aquí

Lo que si haré en este blog es recopilar los artículos en una página estática que a medida que haya contenido la iré
organizando por temáticas concretas.

 

ZoomGallery for Android

pinch zoom android gallery java Se trata de mi primer proyecto subido a Github y el primer código que comparto de Android. Es una librería que genera una galería de fotos a partir de urls de imágenes o archivos locales.

Entre sus características, tiene:

– Pinch Zoom: Vamos, ese de los dos dedos

– DoubleTap Zoom: Zoom rápido al hacer doble click en la pantalla

– Scroll de la foto zoomeada para ver al detalle

– Scroll horizontal de las vistas

– Reciclado de vistas para salvar memoria

– Listener de click

– ProgressBar mientras carga la foto (en caso de que sea de internet)

– Cargador de imágenes desde url, o local (assets)

 

Si quieres descargarte y probar el apk, puedes hacerlo aquí

Y si gustas descargar el código, modificarlo, insultarle o lo que quieras, visita el repo de github

Gracias a:

http://marcreichelt.blogspot.com/2010/09/android-use-realviewswitcher-to-switch.html (RealViewSwitcher)
http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/ (ImageViewTouch)