# Lazarus delphi **Repository Path**: chenbool/lazarus-delphi ## Basic Information - **Project Name**: Lazarus delphi - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-19 - **Last Updated**: 2026-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分屏直播播放器 - Lazarus 版 使用说明 ## 一、项目文件 | 文件 | 说明 | |:-----|:-----| | `liveGui.lpi` | Lazarus 项目文件 | | `liveGui.lpr` | 程序入口 | | `uMainForm.pas` | 主窗体单元(含 TPlayerCell 播放器单元格类) | | `uMainForm.lfm` | 主窗体设计 | | `libvlc.pas` | libvlc.dll 的 Pascal 绑定单元 | | `liveGui.exe` | 已编译的 64 位可执行文件 | ## 二、功能对齐(与 C# LibVLCSharp 版 100%) | 功能 | 实现方式 | |:-----|:---------| | 1/2/4/6/9 分屏切换 | 组合框选择 + 动态创建 TPlayerCell | | 分屏布局 1×1/1×2/2×2/2×3/3×3 | LayoutCells 手动计算行列 | | RTSP/RTMP/HLS/HTTP 播放 | libvlc_media_new_location | | 本地文件播放 | libvlc_media_new_path | | 播放/暂停/停止 | TogglePlayPause 状态机判断 | | 音量控制 0-100 | TTrackBar + libvlc_audio_set_volume | | TS 格式录制 | sout=#duplicate{dst=display,dst=std{access=file,mux=ts,dst=...}} | | 录制时长+文件大小实时显示 | 500ms 定时器轮询 | | 全部播放/停止/录制/清空 | 遍历 TPlayerCell 数组 | | network-caching=300 + rtsp-tcp | libvlc_media_add_option | | 录制命名 Record_索引_时间戳.ts | FormatDateTime | | 录制路径 程序目录\Recordings | ExtractFilePath(Application.ExeName) | | 窗口关闭资源释放 | destructor Destroy 遍历 release | | 视频渲染到指定区域 | libvlc_media_player_set_hwnd + TPanel.Handle | | 状态显示(就绪/连接中/播放中/暂停/停止/错误/结束) | PollState 轮询 libvlc_state_t | ## 三、打开项目 1. 启动 Lazarus IDE 2. 菜单:**文件 → 打开** → 选择 `liveGui.lpi` 3. F9 运行 / Shift+F9 编译 ## 四、libvlc.dll 部署 当前编译为 **64 位**(x86_64-win64),需 64 位 VLC 运行库: ### 获取方式 从 VLC 64 位安装目录复制: - `libvlc.dll` - `libvlccore.dll` - `plugins/` 整个目录 放到 `liveGui.exe` 同目录下。 ### 如需 32 位版本 Lazarus 菜单:**项目 → 项目选项 → 编译器选项 → 编译和链接 → 目标操作系统平台**,改为 `i386-win32`,重新编译。然后使用 32 位 libvlc.dll。 ## 五、架构说明 ### TPlayerCell 类 继承自 `TPanel`,每个实例是一个独立的播放器单元格,包含: - `FVideoPanel: TPanel` — 视频渲染区域(VLC 输出到此 Panel 的 Handle) - `FUrlEdit: TEdit` — 流地址输入 - `FBtnPlayPause / FBtnStop / FBtnRecord: TButton` — 控制按钮 - `FVolumeTrack: TTrackBar` — 音量滑块 - `FStatusLabel / FRecordInfoLabel: TLabel` — 状态显示 - `FLibVLC / FMediaPlayer / FCurrentMedia: Pointer` — VLC 实例句柄 ### 主窗体 - 顶部工具栏:分屏组合框 + 四个批量操作按钮 + 录制路径显示 - `PlayerArea: TPanel`:播放器容器,TPlayerCell 动态创建后 Parent 设为此 Panel - `Timer1: TTimer`:500ms 轮询所有播放器状态和录制信息 ### libvlc API 映射 | Pascal (external) | 用途 | |:-------------------|:-----| | libvlc_new | 创建 VLC 实例 | | libvlc_media_player_new | 创建播放器 | | libvlc_media_new_location/path | 创建媒体 | | libvlc_media_add_option | 添加选项(缓存/RTSP-TCP/录制sout) | | libvlc_media_player_play/pause/stop | 播放控制 | | libvlc_media_player_set_hwnd | 绑定视频输出窗口 | | libvlc_audio_set_volume | 设置音量 | | libvlc_media_player_get_state | 获取播放状态 | | libvlc_media_player_is_playing | 是否播放中 | | libvlc_media_player_release / libvlc_release / libvlc_media_release | 资源释放 | ## 六、注意事项 1. **64位/32位**:DLL 位数必须与 EXE 一致 2. **URL 中文**:libvlc 接受 UTF-8,Pascal 的 PChar 在 Windows 上是 ANSI,如含中文路径建议用英文 3. **9路性能**:9路同时播放对 CPU 要求高,建议多路时降低码率 4. **录制文件**:TS 格式可用 VLC/PotPlayer 直接播放 5. **RTSP 认证**:URL 格式 `rtsp://user:password@ip:port/stream` 6. **窗口缩放**:拖动窗口大小会重新布局单元格位置,不中断播放