java encoding nullpointerexception xuggle audio-capture

java - xuggle-xuggler 5.4 NullPointerException al codificar audio



encoding audio-capture (1)

Hoy estaba trabajando con la biblioteca de Xuggler e intenté capturar mi pantalla que funcionaba perfectamente. Pero también quería agregar audio de mi micrófono al archivo de video que capturé. Esto no fue tan fácil como esperaba, y ahora estoy atascado con esta extraña excepción NullPointerException.

Este es mi código (abreviado):

AudioFormat format = new AudioFormat(8000.0F, 16, 1, true, false); writer.addAudioStream(1, 0, 1, (int) format.getSampleRate()); TargetDataLine line = getTargetDataLineForRecord(format); final int frameSizeInBytes = format.getFrameSize(); final int bufferLengthInFrames = line.getBufferSize() / 8; final int bufferLengthInBytes = bufferLengthInFrames * frameSizeInBytes; final byte[] buf = new byte[bufferLengthInBytes]; final long startTime = System.nanoTime(); ... while (recording) { int numBytesRead = 0; numBytesRead = line.read(buf, 0, bufferLengthInBytes); int numSamplesRead = numBytesRead / 2; short[] audioSamples = new short[numSamplesRead]; if (format.isBigEndian()) { for (int i = 0; i < numSamplesRead; i++) { audioSamples[i] = (short) ((buf[2 * i] << 8) | buf[2 * i + 1]); } } else { for (int i = 0; i < numSamplesRead; i++) { audioSamples[i] = (short) ((buf[2 * i + 1] << 8) | buf[2 * i]); } } writer.encodeAudio(1, audioSamples, System.nanoTime() - startTime, TimeUnit.NANOSECONDS); // CaptureScreen.java:118 } writer.close();

Y aquí está la NullPointerException:

java.lang.NullPointerException at com.xuggle.mediatool.MediaWriter.encodeAudio(MediaWriter.java:923) at exe.media.CaptureScreen.captureScreen(CaptureScreen.java:118) at exe.media.CaptureScreen.main(CaptureScreen.java:43)

El problema que tengo es en esta línea (118):

writer.encodeAudio(1, audioSamples, System.nanoTime() - startTime, TimeUnit.NANOSECONDS);

Por alguna razón cuando trato de codificar las muestras de audio, xuggle arroja una NullPointerException, no estoy seguro de si esto es un error o simplemente yo haciendo algo estúpido, pero no puedo resolverlo de todos modos.

Para una mejor comprensión, he publicado todo el código en pastebin y esto incluye código para capturar mi pantalla y también este código donde intento grabar el audio.

Estos son los frascos que he incluido:
commons-cli-1.2.jar
logback-classic-1.1.2.jar
logback-core-1.1.2.jar
xuggle-xuggler-arch-x86_x64-w64-mingw32.jar *
xuggle-xuggler-noarch-5.4.jar *

(El ''*'' significa que no descargué el contenedor desde su ubicación principal.

Gracias de antemano y recuerde que CUALQUIER respuesta útil será recompensada con la recompensa de 50 rep .


Supongo que tienes line.open (formato); y line.start (); ¿algun lado?

Es posible que deba asegurarse de tener muestras auditivas: if (audioSamples.length> 0) writer.encodeAudio ...

Además, es posible que desee agregar slf4j-api-1.6.4.jar y slf4j-simple-1.6.4.jar para obtener más detalles sobre los errores de Xuggler.