【问题标题】:Grabbing frames from a Hikvision IP-camera从海康威视 IP 摄像机抓取帧
【发布时间】:2018-12-04 03:51:59
【问题描述】:

我在从远程 IP 摄像机抓取帧时遇到问题。 我的雇主希望它在 C# .NET(适用于 Windows)中完成,并且尽可能使用轻量级解决方案,即不使用任何大型框架。

设备型号为DS-2CD2632F-I,我们目前已连接到我的局域网,并且相机的网络界面工作正常。

我已经尝试了几个流行的框架,例如AForge、EmguCV、OzekiSDK 和 Directshow.NET,但它们似乎都没有工作。 特别是OzekiSDK(显然是海康威视推荐的?)即使我只是使用提供的示例项目,也无法从相机获取视频流,它只是显示黑屏并抛出“空相机对象" 如果我​​尝试抓取帧,则会出现异常。

相机的网络界面工作正常,甚至 VLC 播放器也可以通过 rtsp:// 链接 (rtsp://my_ip:554//Streaming/Channels/1) 成功播放来自相机的流,而无需询问登录名和密码。

我考虑过使用 libvlcnet,但我不确定这是一个可行的解决方案。

你有什么建议吗?

【问题讨论】:

    标签: c# .net ip-camera


    【解决方案1】:

    好吧,我想我想通了。我会在这里发布解决方案,以防将来有人需要它。 我发现,对于这种特殊类型的相机,有一个 url,它只是将相机的当前帧作为 JPEG 图片返回,如下所示: http://IP_ADDRESS:PORT/Streaming/channels/1/picture?snapShotImageType=JPEG

    由于我的雇主只需要能够在需要时从相机中抓取一帧并且不需要流式传输视频本身,因此我只编写了一个应用程序,通过使用异步 Web 从该 url 复制此 JPEG -请求:

    private Bitmap loadedBitmap;
    ...
    private void requestFrame()
    {    
     string cameraUrl = @"http://192.168.0.1XX:80/Streaming/channels/1/picture?snapShotImageType=JPEG";
     var request = System.Net.HttpWebRequest.Create(cameraUrl);   
     request.Credentials = new NetworkCredential(cameraLogin, cameraPassword);
     request.Proxy = null;
     request.BeginGetResponse(new AsyncCallback(finishRequestFrame), request);
    }
    
    void finishRequestFrame(IAsyncResult result)
    {
     HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
     Stream responseStream = response.GetResponseStream();
    
     using (Bitmap frame = new Bitmap(responseStream)) {
      if (frame != null) {
       loadedBitmap = (Bitmap) frame.Clone();                        
      }
     }
    }
    ...
    requestFrame(); // call the function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-19
      • 2019-05-30
      • 2019-07-12
      • 2022-07-12
      • 1970-01-01
      • 2018-01-26
      • 2018-01-23
      • 1970-01-01
      相关资源
      最近更新 更多