JavaFX: Creando un front end para ffmpeg | Haciendo ScreenCast.
Hola a todos, hoy les comparto mi pequeño y simple proyecto hecho en JavaFX, quise utilizar el SceneBuilder y los XML de FX, mas los CSS (de FX también).
Básicamente, la GUI solo actúa como un control para iniciar una grabación de audio y vídeo de nuestro entorno de escritorio. El verdadero poder lo tenemos en el software ffmpeg, el cual lanzamos como un proceso pero le hacemos algunas modificaciones mientras estamos en java.
El proyecto se compone de la siguiente manera:
Bien, cuando usamos la creacion de la GUI con FXML debemos tener tres cosas: La clase de control, el archivo fxml y nuestra clase principal.
Veamos pues;
Nuestro archivo FXML
Y nuestra clase principal:
Y unas cosillas extras, nuestro archivo css y una clase de utilidades:
Para muestra un video:
My ScreenCast demonstration from Kalt Wulx on Vimeo.
Recuerden que pueden descargar o clonar el proyecto desde git: les comparto el enlace y la pagina web.
Obviamente para mejores resultados es conveniente revisar la documentacion oficial de ffmpeg.
Me gustaria leer sus criticas y comentarios, me gustaria ademas me dieran algunos consejos para mejorar mi codigo.
- Jose Manuel's blog
- Inicie sesión o regístrese para enviar comentarios
Github
No seria mejor que pusieras tu proyecto en Github ? , esta bueno :B
Re:Github
Ya se encuentra en GitHub, en el post esta el enlace al repositorio.
Saludos.
Sólo en *nix?
Hola José
Una duda ffmpeg sólo funciona en plataformas Linux? Si es así en mi caso prefiero usar comandos desde un archivo bash o shell script
Re: Sólo en *nix
Nop, FFmpeg tiene soporte en Windows y en Mac también. Se que en Windows la instrucción no cambiaría mucho pero, no se que tanto en Mac.
Claro, el propósito es que yo diera inicio con algo, aunque fuera muy simple, de aquí tengo la esperanza de seguir añadiendo cosas interesantes (básicamente jugar con características de audio y vídeo), ademas me interesa mucho la cámara web y el soporte en Windows. En Mac no, porque, no tengo una.
Pero claro, si para ti basta un script pues sip. Eso seria lo mas simple de utilizar.
Saludos
Gracias por el aporte
Gracias por la retro, buen ejercicio.
Matar el proceso con SIGNAL 2 en Windows
Realice un port del proyecto hacia ambiente Windows (javax.Swing en lugar de JavaFX) y digo port ya que cuando ejecuto el programa FFMPEG (en un Thread aparte) note que cuando se mata el proceso se cierra el buffer pero de forma incorrecta y por ende el archivo de vídeo/audio queda corrupto y no se puede reproducir
Por ejemplo:
Al listar nuevamente los procesos activos se observa notablemente que el PID ya no existe (ha muerto) causando el inconveniente anteriormente expuesto, sin embargo cuando al proceso activo se le envia un SIGNAL 2 (Ctrl + C) se cierra de forma correcta y el archivo no queda corrupto. Encontré que hay un tema al respecto e incluso software de terceros (sendSignal)
No he realizado la prueba en ambiente *nix supongo que un kill -9 es suficiente.
Tienes razon, con un pkill
Tienes razon, con un pkill -SIGTERM ffmpeg funciona, ya que la señal 15 (SIGTERM) es un cierre correcto.
Saludos.