USB 摄像头预览与录制工具 (Delphi / DirectShow)
DX9_UVC 是一个基于 Delphi 和 DirectShow 的 Windows 应用程序,用于枚举、预览和录制 USB 摄像头(UVC 设备)。支持多种视频格式选择和实时画面预览。
select_webcam 支持 webcam_name 字段进行子串匹配Stoped,插回后自动恢复预览| 文件 | 说明 |
|---|---|
DX9_UVC.dpr |
主入口 |
Unit1.pas / Unit1.dfm |
主窗体(TForm1),UI + IPC 命令处理 |
untUSBCamera.pas |
DirectShow 摄像头枚举、预览、录制核心 |
MahUSB.pas |
USB 设备热插拔检测 |
Unit_IPC_Server.pas |
命名管道 IPC 服务端线程 |
DX9_UVC_IPC_Client.dpr |
IPC 客户端 GUI 程序 |
Unit_IPC_Client.pas |
IPC 客户端通信库(TIPCSender) |
Unit_IPC_Client_Demo.pas/.dfm |
客户端演示窗体 |
IPC_Console_Client.dpr |
IPC 命令行客户端 |
IPC_Client_Example.pas |
IPC 客户端代码示例片段 |
DX9_UVC.ini |
设备配置持久化(自动生成) |
DX9_UVC 启动后会在后台创建一个命名管道 \\.\pipe\DX9_UVC_IPC,外部程序可通过该管道发送 JSON 指令控制摄像头。
| 指令 | 说明 |
|---|---|
ping |
健康检查,返回 "pong" |
list_webcams |
列出所有可用摄像头 |
select_webcam |
按 index 选择摄像头 |
list_formats |
列出当前摄像头的视频格式 |
select_format |
按 index 选择格式并开始预览 |
start_preview |
开始视频预览 |
stop_preview |
停止视频预览 |
get_status |
获取预览状态、分辨率、缩放比例 |
list_params |
列出所有摄像头参数(名称、值、范围、步进) |
set_param |
设置参数(name/value/auto) |
reset_params |
将所有参数恢复为默认值 |
save_json |
保存当前设置为 JSON 文件 |
load_json |
从 JSON 文件加载设置 |
save_snapshot |
截图保存到文件 |
copy_snapshot |
截图复制到剪贴板 |
命令行客户端:
IPC_Console_Client ping
IPC_Console_Client list-webcams
IPC_Console_Client select-webcam 0
IPC_Console_Client set-param Brightness 128
IPC_Console_Client set-param Exposure 0 1 # auto=true
IPC_Console_Client save-json settings.json
IPC_Console_Client json '{"command":"load_json","file":"settings.json"}'
原始 JSON 请求(通过任何命名管道客户端发送):
{"command":"ping"}
{"command":"select_webcam","index":0}
{"command":"set_param","name":"Exposure","value":-5,"auto":false}
{"command":"save_json","file":"mysettings.json"}
{"command":"load_json","file":"mysettings.json"}
程序化调用(Delphi):
uses Unit_IPC_Client;
var
IPC: TIPCSender;
Res: TJSONObject;
begin
IPC := TIPCSender.Create('DX9_UVC_IPC');
try
// 预设参数
IPC.SendSimpleCmd('start_preview').Free;
QuickSetParam('Brightness', 128, False);
QuickSetParam('Exposure', 0, True);
IPC.SendSimpleCmd('stop_preview').Free;
finally
IPC.Free;
end;
end;
提示:编译前请确保已安装上述组件包,或在 IDE 中移除不需要的包引用。
DX9_UVC.dprojWin32Debug 或 ReleaseCtrl + F9 编译call "C:\Program Files (x86)\Embarcadero\Studio\37.0\bin\rsvars.bat"
msbuild DX9_UVC.dproj /t:Build /p:Config=Release
输出路径:.\Win32\Release\DX9_UVC.exe
程序自动读取/写入同目录下的 DX9_UVC.ini:
[WebCam]
WebCam_index=0
WebCam_format_index=1
[Placement]
Top=100
Left=100
Width=1024
Height=768
[设备名称]
Name=Logitech BRIO
format Index=1
維持 32bit,原因:
DirectShow 濾鏡生態系仍以 32bit 為主 — 許多 USB 相機廠商(尤其是較老型號)只提供 32bit 驅動,升 64bit 後可能直接無法辨識裝置,而這正是本程式的核心功能。
轉換不是單純改 Platform 選項 — 需要完整回歸測試所有功能:裝置列舉、預覽、抓幀、截圖、IPC 命令、參數控制。
實際效益有限 — 你目前處理的是 1920×1080 或更低解析度的 UVC 畫面,單幀 buffer 只有 ~6MB,連 2GB 的 1% 都不到。64bit 的大記憶體優勢在這裡完全用不上。
内部项目。