【问题标题】:Combining Direct3D, Axis to make multiple IP camera GUI结合 Direct3D、Axis 制作多个 IP 摄像机 GUI
【发布时间】:2026-01-31 08:40:01
【问题描述】:

现在,我想做的是制作一个新的 GUI,本质上是一个使用 directX(更准确地说,direct3D)的软件,它显示来自 Axis IP 摄像机的流式图像。

暂时我认为整个程序的流程是这样的: 1.获取Axis程序获取流式图片 2. 将图像传递给 Direct3D 程序。 3. 在屏幕上显示程序。

目前我已经制作了一个基本的 Direct3D 应用程序,它可以加载和显示来自 avi 视频的视频帧(用于测试)。我不知道如何使用 DirectX 直接从视频中加载图像,所以我使用 OpenCV 从视频中保存帧并让 DX 上传它们。很慢。

现在我有一些不清楚的事情: 1. 如何获得在 C++ 中工作的 Axis 程序(稍后会查找示例,没什么大不了的) 2. 如何直接从 Axis IP 摄像头程序上传图像。

各位,对于如何让我的程序更有效地运行,你们有什么建议或建议吗?有什么事就告诉我。

【问题讨论】:

    标签: c++ camera direct3d


    【解决方案1】:

    您可能会发现使用 directshow 并在远端添加自定义渲染器会更快,直接将解压缩的视频数据直接复制到 Direct3D 纹理。

    对纹理进行双重缓冲是非常值得的。即显示纹理 0 并上传纹理 1,然后在有新帧可用时交换 2(即在上传到纹理 0 时显示纹理 1)。

    通过这种方式,您可以将视频帧速率与渲染帧速率分离,从而更容易处理掉帧。

    【讨论】:

    • 好主意。我也在考虑使用 DirectShow,但我更喜欢使用 Just direct3D 和 Axis 程序。为了以防万一,我也要学习 DirectShow。
    【解决方案2】:

    我使用 Direct3D 纹理的就地更新(使用IDirect3DTexture9::LockRect),它运行得非常快。您的程序的哪一部分运行缓慢?

    【讨论】:

    • 我不确定,但我猜这是OpenCV将帧保存到图像中的部分,D3D稍后上传并渲染图像。不过,它很慢可能是因为我使用的是软件渲染,而不是硬件,因为我没有任何显卡。
    【解决方案3】:

    要从 Axis 摄像头捕获图像,您可以使用 iPSi c++ 库:http://sourceforge.net/projects/ipsi/

    它可用于捕获图像并控制相机缩放和旋转(如果可用)。

    【讨论】:

    • 其实我更喜欢使用Axis提供的SDK来提取图片。我已经阅读了一些文档并通过 VC++ 中的示例运行,因为需要更多的工作才能使其运行。我还从一位同事那里得到了一个 MFC 程序,它在对话窗口上显示 Axis 摄像机。需要将其转换为与我的程序兼容。不过还是谢谢。万一事情不按我的方式进行,总有你的备份。