问题来由:
公司项目要对接很多厂家的视频采集卡,每个厂家都提供了 SDK。
这些 SDK 基本上都是 VC 封装的。VC2008 、VC2010、 VC2012,都有。还有的竟然用 .Net 来封装。
麻烦的是同一个 VC 运行库,版本还不一样。比如 VC2008 有好几个版本。SDK 中,就使用了不同的版本。
VC 编写的程序都是这个尿性。看看 QQ(PC版) 就知道了。VC2008 、VC2010、 VC2012,都用到了。
这些设备厂家为什么就不能提供 MT 版本的呢。哎。我们还需要在客户的电脑上部署 VC 各个运行库。
将这些不同厂家的 SDK 放到一起,兼容性就难保证了。
我调用三、四个厂家的 SDK,写了个测试程序。程序动不动就内存崩溃。
检查来检查去,发现是 VC 运行库不兼容造成的。
SDK 是视频厂家的,我们也无能为力。而且 SDK 也不一定是视频卡厂家自己做的,也是别的软件公司做的。决定权也不在他们手里。
沟通来沟通去,问题也得不到解决。
而且 VC 写的程序,在 Delphi 中调用,还存在一个问题,就是浮点溢出问题。
Delphi 老手们估计都知道了。VC 中代码,浮点溢出,编译器会自动屏蔽掉。而 Delphi 编译器并不会。
所以你用 VC 来调用,可能是正确的。但是用 Delphi 来调用,同样的步骤,有可能就得不到正确的结果。
既然是视频采集卡,肯定是支持 DirectShow 的。那就用 DirectShow 来解决。
Delphi + DirectShow + FFMPEG 肯定能解决上面所有问题。而且程序更具有通用性。说干就干。
开发工具:Delphi10.4.2
开发环境:WIN10X64
处理环境:只针对视频部分,无音频部分
代码地址:dbyoung720/dbVideoSDK · GitHub
软件功能:
01、稳定;
02、高效;基本没有性能损失。和硬件提供的性能一致;
03、支持所有 DirectShow 视频输入设备;
04、支持 x86、x64 平台;Win7、Win10 系统(Win11 下没有测试,应该可以正常工作);
05、支持视频预览、截图、图片叠加;
06、支持高清截图(截图同时对图片进行降噪处理);
07、支持 MP4(H264)视频保存到文件;
08、支持硬件加速 MP4 编码;支持 Intel 硬件加速、Nvidia 硬件加速;
09、支持 RTMP 视频流推送;不耗 CPU 资源(启用硬件加速的情况下);
10、支持视频涂鸦。可以直接在视频上画图,然后 RTMP 推送出去(可以用于远程教学、会诊);
11、支持调整视频显示风格;如水平镜像、垂直镜像,等;
12、支持虚拟桌面;
13、支持人脸检测(只支持 x64 平台;需要 OpenCV4.6、CUDA11.7 SDK;使用 GPU 加速,不占用 CPU 资源。不影响帧率);
14、Intel 支持 MP4 编码的显卡必须是 630 或者以上;
15、Nvidia 支持 MP4 编码的显卡必须是 GTX 1030 以上;
<https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new>
示例:
VC : VC2022 目录:VC
C# : C#2022 目录:C#
D10 : Delphi10.4.2 目录:D10
开发流程:
01、初始化SDK:dbVideo_Init;
02、获取视频设备列表:dbVideo_EnumVideoInputDevice;
03、选取视频支持分辨率:dbVideo_EnumVideoFormat;
04、开始视频预览:dbVideo_PreviewStart;
05、截图(dbVideo_SnapBmp)、MP4录制(dbVideo_RecordMP4)、RTMP推流(dbVideo_LiveRTMP),等等操作......;
06、停止视频预览:dbVideo_PreviewStop;
07、SDK销毁:dbVideo_Free;
未来打算:
1、支持人脸检测、人脸识别、人脸登记;
2、支持车牌识别;