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.