【问题标题】:smeared/corrupted capture of RTSP streamsRTSP 流的模糊/损坏捕获
【发布时间】:2015-07-19 11:53:44
【问题描述】:

我使用 emgu cv 2.4.10 创建了一个 RTSP 流查看器,最终将与 IP 摄像机一起使用。由于我还没有相机/s,我正在测试使用 VLC(Windows GUI)从视频文件创建流。

:sout=#duplicate{dst=rtp{sdp=rtsp://:8554/stream},dst=display} :sout-all :sout-keep

我正在本地主机上进行所有测试。

这是我的捕获代码:

private void ProcessFrame(object sender, EventArgs arg) {
    try {
        frame = _capture.QueryFrame();
        pictureBox1.Image = frame.ToBitmap();
    }
    catch (Exception ex) {
        MessageBox.Show(ex.Message.ToString());
    }
}

使用此事件处理程序调用此方法:

_capture = new Capture("rtsp://localhost:8554/stream");
Application.Idle += ProcessFrame;
_capture.Start();

捕获被破坏,随机出现的“拖尾”总是发生在帧的下部:

我在网上看到其他几个人最近在去年 12 月报告了这个问题,但没有找到解决方案或对我有用:

为了缩小问题的范围,我从命令行运行了 ffplay 并且捕获是完美的。我已经运行了另一个 VLC 实例来捕获 RTSP 流并且它显示完美。所以这显然是 open cv/emgu cv 中的一个问题。

一时兴起,我将 VLC 更改为使用 HTTP 流式传输。

:sout=#duplicate{dst=http{mux=ffmpeg{mux=flv},dst=:8080/stream},dst=display} :sout-all :sout-keep

这在我的代码中显示良好,但帧速率明显较低,不适用于我的应用程序。我非常感谢任何解决此问题的提示。谢谢。

【问题讨论】:

    标签: opencv rtsp emgucv capture corruption


    【解决方案1】:

    我不知道您是否解决了您的问题,但我建议您不要在 application.idle 事件中进行处理。相反,使用线程。创建另一个线程并在其中创建您的进程。示例 c# 代码:

    Thread t = new Thread(new ThreadStart(()=>{ while(true) {frame = _capture.QueryFrame();
            pictureBox1.Image = frame.ToBitmap();}}));  t.IsBackGround = true; t.Start();
    

    【讨论】:

    • 感谢您的回复。我最终更新到最近发布的 Emgu.CV-3.0.0-rc1。令我惊讶的是,这似乎解决了我所有的涂抹问题。到目前为止一切顺利。
    猜你喜欢
    • 2011-12-17
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 2012-01-29
    • 1970-01-01
    • 2012-09-25
    • 2016-12-17
    相关资源
    最近更新 更多