java如何使用JAVACV播放视频和音频
我想用JavaCV制作一个视频播放器。 在获得图像后,我现在正在尝试获取音频
以下是我目前的代码:
package robomow;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.AudioFormat;
import javax.swing.JOptionPane;
import java.nio.ShortBuffer;
import java.nio.ByteBuffer;
import org.bytedeco.javacv.FrameGrabber.Exception;
import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
public class client {
public static void main(String[] args) {
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("rtsp://192.168.101.22:554/stream0?username=UUUUU&password=PPPPP");
grabber.setImageWidth(960);
grabber.setImageHeight(540);
grabber.setFrameRate(25);
grabber.setOption("rtsp_transport", "tcp");
grabber.setOption("flags", "nobuffer");
grabber.setOption("flags", "low_delay");
grabber.setAudioOption("crf", "0");
grabber.setAudioBitrate(64000);
grabber.setSampleRate(8000);
grabber.setAudioChannels(1);
grabber.setAudioCodec(avcodec.AV_CODEC_ID_PCM_MULAW);
try {
grabber.start();
} catch (Exception e) {
e.printStackTrace();
}
final CanvasFrame cFrame = new CanvasFrame("Camera Preview", CanvasFrame.getDefaultGamma() / grabber.getGamma());
Frame capturedFrame = null;
final AudioFormat audioFormat = new AudioFormat(grabber.getSampleRate(), 16, grabber.getAudioChannels(), true, true);
final DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
SourceDataLine soundLine;
try {
soundLine = (SourceDataLine) AudioSystem.getLine(info);
soundLine.open(audioFormat);
soundLine.start();
} catch (LineUnavailableException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
try {
while ((capturedFrame = grabber.grab()) != null)
{
if (cFrame.isVisible())
{
cFrame.showImage(capturedFrame);
}
}
} catch (org.bytedeco.javacv.FFmpegFrameGrabber.Exception e1) {
e1.printStackTrace();
}
cFrame.dispose();
try {
//soundLine.stop();
grabber.stop();
} catch (org.bytedeco.javacv.FFmpegFrameGrabber.Exception e) {
e.printStackTrace();
}
}
}
问题是没有播放音频。 我可以使用vlc播放器从流中听到音频,没有任何问题
有谁能就我做错了什么给出建议吗
共 (0) 个答案