오늘은 Xuggler 라이브러리를 사용하면서 완벽하게 작동하는 화면 캡처를 시도했습니다. 그러나 마이크에서 캡처 한 비디오 파일에 오디오를 추가하려고했습니다. 이것은 예상했던 것만 큼 쉽지 않았으며, 이제는이 이상한 NullPointerException으로 인해 막혀 있습니다. xuggle-xuggler 5.4 오디오 인코딩시 NullPointerException이 발생했습니다.
이
은 (약칭 함) 내 코드입니다 :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();
그리고 여기에 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)
제가하는 데 문제는이 라인 (118)에 있습니다 :
writer.encodeAudio(1, audioSamples, System.nanoTime() - startTime, TimeUnit.NANOSECONDS);
오디오 샘플을 인코딩하려고 할 때 xiggle이 NullPointerException을 발생시키는 이유는 무엇입니까? 버그 또는 그냥 바보 같은 일을하고 있지만 어쨌든 그것을 해결할 수 없습니다.
더 나은 이해를 위해 모든 코드를 pastebin에 올렸으며 여기에는 내 화면 캡처 용 코드와 오디오 녹음을 시도하는 코드가 포함되어 있습니다.
이 내가 포함 한 항아리입니다
공유지-CLI-1.2.jar
logback 고전-1.1.2.jar
logback 코어-1.1.2.jar는
xuggle-xuggler-arch-x86_x64-w64-mingw32.jar *
xuggle-xuggler-noarch-5.4.jar *
합니다 ('*'는.이 차의 위치에서 나는 항아리를 다운로드하지 않은 사전 에서
감사를 의미하고, 어떤 도움이 응답 위스콘신 기억 50 rep bounty 보상을받을 수 있습니다!