analytics

Mostrando entradas con la etiqueta maven. Mostrar todas las entradas
Mostrando entradas con la etiqueta maven. Mostrar todas las entradas

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/