5

我有一个高清网络摄像机,我试图通过 rtsp 抓取帧并使用以下代码:

//in Form_Load
Application.Idle += getNextFrame;

和事件处理程序:

private void getNextFrame(object sender, EventArgs ags)
{
        //where _imgCount is the total image Grabs
        lbl_Count.Text = _imgCount++.ToString(); 
        // and ibLive is a Emgu ImageBox
        ibLive.Image = capAxis.QueryFrame().Resize(640, 480, INTER.CV_INTER_AREA);
}

当我启动程序时,它会在屏幕底部出现“条纹”之前抓取 20-40 帧。它总是在图像的底部,但有时它会占据屏幕的一半。

在此处输入图像描述

流分辨率为 1920x1080,使用 mjpeg。我尝试切换到 h.264,但结果相同。

我正在使用 Emgu 版本 x86-2.4.0.1717

有任何想法吗?谢谢。

4

4 回答 4

2

我知道这是一个老问题,但我最近遇到了同样的问题。我建议使用另一个流媒体库。例如。

如果您确实需要使用 EMGU 进行流式传输,请创建具有较低分辨率或较高压缩率的流配置文件。我将压缩设置为 30 并使用相同的分辨率,然后在 rtsp url 中提供流配置文件名称。(假设您使用像我这样的 Axis 相机capAxis

Capture cap = new Capture(@"rtsp://10.0.0.1/axis-media/media.amp?videocodec=h264&streamprofile=rtspstream");
于 2014-10-07T05:17:15.770 回答
1

我有同样的问题,我已经自己解决了。我使用 iSpy 知道我的 ONVIF 网络摄像机的网址。我的网络摄像机的网址是 rtsp://192.168.1.xxx:554//user=admin_password=tlJwpbo6_channel=1_stream=0.sdp?real_stream 对于流 = 0,我的网络摄像机以高清分辨率 (1280 x 720) 运行,并且该分辨率使我的图像出现条纹。因此 iSpy 提供了两种 URL 选项,另一种只是流不同。我将 stream = 1 更改为低分辨率(352 x 288),图像效果很好!我的图像中没有条纹。我从这个问题中学到的东西是使用 RTSP,你必须以低分辨率使用它。高分辨率会使图像效果不佳。希望它可以帮助您解决问题。

问候, 阿方苏斯·达尼

于 2015-08-13T03:23:05.410 回答
1

在捕获字符串的末尾添加这个“?tcp”

Capture cap = new Capture(@"rtsp://10.0.0.1/axis-media/media.amp?videocodec=h264&streamprofile=rtspstream?tcp");

编辑

这是我的代码,是的,它有效,我正在使用 IP cam DAHUA。

Capture cap = Capture(@"rtsp://admin:12345@10.0.0.01:554/cam/realmonitor?channel=1&subtype=01?tcp"); 
于 2017-07-04T23:06:09.913 回答
0

迟到的回复,但可能会帮助面临类似挑战的人。

Emgu 处理 RTSP 流的能力有限且不稳定。我在这个问题中遇到了与讨论类似的问题,

无法使用 EMGU CV 从 RTSP 流中连续抓取图像

解决方案是使用 RTSPClientSharp,它就像一个魅力。(https://github.com/BogdanovKirill/RtspClientSharp

于 2022-01-02T10:18:24.927 回答