问题遇到的现象和发生背景
音乐与视频合成 执行到这里为什么报空指针异常 recorder.record(sampleFrame); 求解
用代码块功能插入代码,请勿粘贴截图
pom文件
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.2</version>
</dependency>
public static void testAudioMornThanVideo(String videoInput, String audioInput, String outputPath)
throws org.bytedeco.javacv.FrameRecorder.Exception, org.bytedeco.javacv.FrameGrabber.Exception {
FFmpegFrameGrabber imageGrabber = new FFmpegFrameGrabber(videoInput);
imageGrabber.start();
FFmpegFrameGrabber audioGrabber = new FFmpegFrameGrabber(audioInput);
audioGrabber.start();
// 流媒体输出地址,分辨率(长,高),是否录制音频(0:单声道/1:立体声)
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputPath, imageGrabber.getImageWidth(),
imageGrabber.getImageHeight(), 1);
recorder.setInterleaved(true);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setFormat("mp4");
recorder.start(imageGrabber.getFormatContext());
long videoTime = imageGrabber.getLengthInTime();
AVPacket packet = null;
// 解封装/解复用
for (; (packet = imageGrabber.grabPacket()) != null;) {
// 封装/复用
recorder.recordPacket(packet);
}
// 解封装/解复用
Frame sampleFrame = null;
while ((sampleFrame = audioGrabber.grabSamples()) != null) {
recorder.record(sampleFrame);
if (audioGrabber.getTimestamp() >= videoTime) {
break;
}
}
recorder.close();
audioGrabber.close();
imageGrabber.close();
}
运行结果及报错内容
Exception in thread "main" java.lang.NullPointerException
at org.bytedeco.javacv.FFmpegFrameRecorder.recordSamples(FFmpegFrameRecorder.java:1066)
at org.bytedeco.javacv.FFmpegFrameRecorder.record(FFmpegFrameRecorder.java:922)
at org.bytedeco.javacv.FFmpegFrameRecorder.record(FFmpegFrameRecorder.java:911)
at VideoUtils.testAudioMornThanVideo(VideoUtils.java:37)
at VideoUtils.main(VideoUtils.java:157)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\aa.mp4':