analytics

miércoles, 15 de marzo de 2017

Grabar desde Java usando VLC

Cómo grabar desde Java utilizando la aplicación VLC y la librería "vlcj"




Partiremos de que vamos a utilizar Maven, la librería vlcj y la aplicación VLC (debe estar instalada en nuestro equipo). Lo que vamos a hacer es grabar la entrada de micrófono manejando VLC desde nuestro código Java. Cuidado con las versiones de vlcj (v2.4.1), jna y jna-platform (v3.5.2). Existen versiones posteriores de las mismas, pero pueden ser incompatibles entre sí. Con las que he puesto funciona, hay otras que dan problemas.

En nuestro pom.xml de Maven:

...

<properties>
        <jna.version>3.5.2</jna.version>
        <slf4j.version>1.7.10</slf4j.version>
</properties>

...

       <dependency>
            <groupId>uk.co.caprica</groupId>
            <artifactId>vlcj</artifactId>
            <version>2.4.1</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>${jna.version}</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna-platform</artifactId>
            <version>${jna.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
            <scope>test</scope>
        </dependency>

...


Ahora veamos el código para iniciar la grabación


    NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:/Program Files/VideoLAN/VLC");         
            Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
        
            EmbeddedMediaPlayerComponent mediaPlayerComponent = new          EmbeddedMediaPlayerComponent();

            JFrame frame = new JFrame("Gemma Recorder: Don't close");
            frame.setContentPane(mediaPlayerComponent);
            frame.setLocation(100, 100);
            frame.setSize(1050, 600);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);

            //Save video
            File dir = new File("URL DE CARPETA DESTINO DE GRABACIONES");
            DateFormat df = new SimpleDateFormat("yyyyMMdd-HHmmss");
            String fileName = dir.getAbsolutePath() + "/Capture-" + df.format(new Date()) + ".mp3";
            System.out.println("Grabando en " + fileName);
            String mediaURL = "dshow://";
            mediaPlayerComponent.getMediaPlayer().playMedia(mediaURL, ":sout=#transcode{vcodec=none,venc=x264{cfr=16},scale=1,acodec=mp3,ab=160,channels=2,samplerate=44100}:file{dst=" + fileName + "}");



Cuando queramos detener la grabación, simplemente, 

mediaPlayerComponent.getMediaPlayer().stop();

A continuación, enlaces a la documentación oficial de comandos VLC

https://wiki.videolan.org/VLC_command-line_help/
https://wiki.videolan.org/Documentation:Command_line/
https://wiki.videolan.org/Command_line/








No hay comentarios:

Publicar un comentario