javacv部署到windows server 2012 r2时出现了报错No audio output stream (Is audioChannels > 0 and has start() been called?) (For more details, make sure FFmpegLogCallback.set() has been called.),那这个问题如何解决呢?
目录
1.在代码中添加recorder.setAudioChannels(1);
遇到的问题场景描述
javacv在本地运行时正常,可以正常的录制rtsp,部署到windows server 2012 r2时出现了报错No audio output stream (Is audioChannels > 0 and has start() been called?) (For more details, make sure FFmpegLogCallback.set() has been called.),那这个问题如何解决呢?
一、原因分析
本地运行时,javacv调用默认音频,所以是正常的,部署到服务器上,服务器是没有音频的,所以出现了空指针报错,那就需要指定音频
//按上面日志异常堆栈去跟代码,最后定位这里:
public boolean recordSamples(int sampleRate, int audioChannels, Buffer... samples) throws Exception {
if (this.audio_st == null) {
throw new Exception("No audio output stream (Is audioChannels > 0 and has start() been called?)");
} else if (!this.started) {
throw new Exception("start() was not called successfully!");
}
二、解决代码
1.在代码中添加recorder.setAudioChannels(1);
代码如下(示例):
//2.录制视频/音频
FFmpegFrameRecorder recorder=newFFmpegFrameRecorder(outfile,grabber.getImageWidth(),grabber.getImageHeight());
recorder.setFrameRate(frameRate);// 设置帧率
recorder.setVideoBitrate(grabber.getVideoBitrate());
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); //压缩方式264
recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
recorder.setFormat("mp4");
//添加此代码解决报错问题,指定音频频道
recorder.setAudioChannels(1);
recorder.start();
添加后重新编译,更新服务器,启动后,就不在报错了,录制正常。