DX9_UVC

USB 摄像头预览与录制工具 (Delphi / DirectShow)

概述

DX9_UVC 是一个基于 Delphi 和 DirectShow 的 Windows 应用程序,用于枚举、预览和录制 USB 摄像头(UVC 设备)。支持多种视频格式选择和实时画面预览。

功能

项目结构

文件 说明
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 设备配置持久化(自动生成)

IPC 外部控制

DX9_UVC 启动后会在后台创建一个命名管道 \\.\pipe\DX9_UVC_IPC,外部程序可通过该管道发送 JSON 指令控制摄像头。

支持的 IPC 指令

指令 说明
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;

IPC 客户端工具

编译要求

提示:编译前请确保已安装上述组件包,或在 IDE 中移除不需要的包引用。

编译

RAD Studio IDE

  1. 打开 DX9_UVC.dproj
  2. 选择目标平台 Win32
  3. 选择配置 DebugRelease
  4. Ctrl + F9 编译

命令行 (MSBuild)

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

使用

  1. 启动程序,左侧列表自动枚举 USB 摄像头
  2. 点击摄像头名称,右侧列出支持的视频格式
  3. 双击视频格式开始预览
  4. 滚动滚轮缩放画面,左键拖拽平移,中键重置 1:1
  5. 在右侧勾选 Mirror H / Mirror V 或选择 Rotation 角度
  6. 点击 Video Preview 按钮切换预览启停
  7. 状态栏显示当前分辨率与缩放比例

備註

維持 32bit,原因:

DirectShow 濾鏡生態系仍以 32bit 為主 — 許多 USB 相機廠商(尤其是較老型號)只提供 32bit 驅動,升 64bit 後可能直接無法辨識裝置,而這正是本程式的核心功能。
轉換不是單純改 Platform 選項 — 需要完整回歸測試所有功能:裝置列舉、預覽、抓幀、截圖、IPC 命令、參數控制。
實際效益有限 — 你目前處理的是 1920×1080 或更低解析度的 UVC 畫面,單幀 buffer 只有 ~6MB,連 2GB 的 1% 都不到。64bit 的大記憶體優勢在這裡完全用不上。

许可

内部项目。