使用 JavaCV 库接收 RTSP 流

Recieving RTSP stream With JavaCV Library

我目前正在尝试从网络上的 IP 摄像机获取 RTSP 流,以便我可以将面部识别算法应用于帧(为此我正在使用 JavaCV 库)。

当我尝试获取 RTSP 流时,我开始收到错误消息,具体取决于我尝试使用的方法。

下面是应该有效的代码:

try {
    FFmpegFrameGrabber streamGrabber = new FFmpegFrameGrabber("rtsp://admin:12345@(ip)/ch1/main/av_stream");
    streamGrabber.setFormat("h264");
    streamGrabber.setFrameRate(30);
    streamGrabber.setImageWidth(getWidth());
    streamGrabber.setImageHeight(getHeight());
    streamGrabber.start();
} catch (Exception e) {
    e.printStackTrace();
}

那段特定的代码给我这个错误:

org.bytedeco.javacv.FrameGrabber$Exception: avformat_open_input() error -1330794744: Could not open input "rtsp://admin:12345@192.168.64.96/ch1/main/av_stream". (Has setFormat() been called?)
    at org.bytedeco.javacv.FFmpegFrameGrabber.startUnsafe(FFmpegFrameGrabber.java:393)
    at org.bytedeco.javacv.FFmpegFrameGrabber.start(FFmpegFrameGrabber.java:341)
    at main.FaceApplet.init(FaceApplet.java:87)
    at sun.applet.AppletPanel.run(AppletPanel.java:425)
    at java.lang.Thread.run(Thread.java:695)

我试过:

我哪里做错了,这是代码问题还是相机问题?

更新

我终于成功了...神奇的公式似乎是使用 FFMpeggrabber 获取流...为避免错误,请不要使用该函数设置视频格式。初始化程序代码应如下所示:

streamGrabber = new FFmpegFrameGrabber("rtsp://admin:12345@(ip):554/live.sdp");
streamGrabber.setFrameRate(30);
streamGrabber.setImageWidth(getWidth());

try {
    streamGrabber.start();
} catch (FrameGrabber.Exception e) {
    e.printStackTrace();
}