# XPlayer **Repository Path**: xinyi61/XPlayer ## Basic Information - **Project Name**: XPlayer - **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-06-14 - **Last Updated**: 2026-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README XPlayer 功能与使用说明

XPlayer

概述

XPlayer 是基于 Qt 6FFmpeg 的视频播放器,面向码流分析与 IPC 设备调试。支持本地文件、RTSP/RTMP/HTTP(S) 网络流,以及 ipc:// 设备复用流(视频与 JSON 命令共用一条 TCP)。

主要能力包括:NALU 帧分析、H.264/H.265 编码结构叠加、SEI AI 检测框绘制、多窗口独立预览、YOLO 目标检测、云台控制与设备 JSON 命令、图片/YUV 查看等。

主标签页

主视频区顶部有五个标签,切换时会自动清理上一标签内容(停止播放、关闭输入等)。

标签说明
单视频单路播放 + NALU 分析 + 编码叠加
多视频1 / 2 / 4 分屏,每路独立播放与分析
算法YOLO26 目标检测
图片静态图片查看与像素拾取
YUV原始 YUV 文件查看与分析

打开媒体

方式说明
File → Open... (Ctrl+O)打开本地媒体文件,支持多选
File → Open Stream...输入 RTSP/RTMP/HTTP/HTTPS/ipc:// 等地址
拖拽将文件或 URL 拖入主窗口
空界面点击未加载媒体时,点击中间播放图标弹出打开文件对话框
命令行XPlayer.exe <文件路径或 URL>
File → Recent Files最近打开的本地文件(网络流不记录)

地址示例

协议示例说明
RTSPrtsp://192.168.1.10/stream常规网络流
TCP 裸流tcp://192.168.1.10:5000?format=h264无帧头的裸 H264/HEVC
IPC 复用ipc://192.168.0.165设备调试端口,默认 9558

本地文件 vs 网络流

类型行为
本地文件进入分析模式:分批扫描帧/NALU(默认每批 50 帧),自动预览首个 I 帧,不自动播放
RTSP / RTMP / HTTP(S)打开后直接播放
ipc:// 设备复用流直接播放,同时建立设备命令通道,可在命令 Tab 发送 JSON
打开失败:对话框会显示 FFmpeg 具体原因。若提示 moov atom not found,通常表示 MP4 未完整写入(录制未结束、复制中断等),请使用完整文件。

Open Stream 对话框

  • 自动去除首尾空格并校验 URL 格式
  • RTSP 在后台线程连接,界面显示 Connecting: ...
  • RTSP 先尝试 TCP,失败再尝试 UDP;连接超时约 5 秒

界面布局

  • 主区域 8:2 水平分割:左侧视频,右侧 NALU 分析面板
  • 深色主题(Fusion + 自定义样式)
  • 单视频标签下顶部工具栏:Open、叠加量化柱状图AI 及算法云台 下拉菜单
  • Tools 菜单:重置视图、保存截图、云台、PID 调参、媒体信息、打开串流录制目录
  • 帮助 菜单:关于 XPlayer(版本、Qt/FFmpeg 版本、功能简介)
  • 状态栏左侧:当前状态 / 帧号 / 像素坐标;右侧:当前时间 / 总时长

视频区域

标尺与缩放

  • 顶部水平像素标尺,右侧垂直像素标尺(宽 52px)
  • 滚轮:以鼠标位置为中心缩放(0.1×~20×)
  • 放大后:左键拖拽平移画面

像素拾取

  • 左键点击画面显示红色十字准星与圆点
  • 坐标格式:(x, y) [nx, ny](源像素 + 归一化 0~1)
  • 状态栏同步显示 Pixel: (x, y) Norm: (nx, ny)

SEI AI 检测叠加

播放带用户数据 SEI 容器的 H.264/H.265 码流时,可在柱状图菜单中勾选 SEI叠加 后绘制 AI 检测框(默认不勾选)。单视频与多视频均支持。

功能说明
触发条件SEI NALU 含 magic 0x13377331
检测框按参考分辨率映射,显示类别 + 置信度%
跟踪高亮AI_TRACK.track_idAI_OBJ.track_id 一致时加粗高亮
双路竖拼如 2880×3240 机型,默认只画上路广角目标
类别0 人、1 车、2 bus、3 truck、7 猫、8 狗(其余显示 objN)

码流分析柱状图(单视频)

工具栏 柱状图 下拉中至少勾选一项时显示 Elecard 风格帧大小/同步分析条。

  • 滚轮缩放时间轴;放大后可左键拖拽;Shift + 滚轮平移
  • 悬停显示帧详情(stream/display 序号、PTS、QP 等)
  • 左侧面板 headers Tab:当前帧 H.264/H.265 语法头树
  • 左侧面板 stream Tab:整路码流统计

空状态

无媒体时显示图标与提示:打开文件、网络串流,或将媒体拖到此处。右键可打开文件/串流;已加载时可关闭、查看详情。

播放控制

单视频

控件叠加在视频底部黑边区域。

控件说明
播放/暂停底部居中圆形按钮
进度条拖动可 seek;暂停时拖动会实时更新画面预览
时间进度条左右为当前/总时长
  • 分析模式下点 ▶ 退出帧预览并开始正常播放
  • 暂停后再播放从当前位置继续,不会从头重播
  • 播放中 Frame List 持续收集新帧,进度条自动跟随
  • 无音轨视频用视频 PTS 驱动进度条

多视频

  • 每个分屏窗口底部有独立播放/暂停按钮
  • 点击窗口画面可切换音频输出(同时仅一路有声音)
  • 多视频标签下不显示单视频的全局进度条

多视频

分屏布局

在面板空白处或任意窗口 右键 → 分屏

选项布局
1 分屏单窗口全屏
2 分屏(上下)上下两路
2 分屏(左右)左右两路
4 分屏2×2 四路(默认)

与 NALU 面板联动

  • 选中窗口后,右侧 Frame List / 十六进制显示该窗口数据
  • 暂停后可用 ↑/↓ 选帧预览;滚到底部加载下一批(每批 50 帧)
  • 本地文件打开后直接播放(与单视频「先分析再播」不同)

算法检测

标签 算法 用于 YOLO26 目标检测。切换时右侧 NALU 面板自动隐藏,工作区全宽显示。

输入源

方式说明
打开图片PNG / JPEG / BMP / WebP 等
打开视频MP4 / MKV / AVI 等
RTSP/串流rtsp://http://rtmp://

操作

按钮说明
检测当前帧对当前图片或视频/流的一帧运行检测
实时检测视频或 RTSP 上连续检测(约 30 fps)
关闭停止检测并释放输入

启动时自动从可执行文件目录向上查找 models/ 下的默认 ONNX(优先 yolo26n.onnx)。可调置信度阈值与输入尺寸(默认 640)。推理基于 OpenCV DNN(CPU)。

图片与 YUV

图片

  • 文件 → 打开图片Ctrl+I)或空状态点击
  • 标尺、滚轮缩放、左键拖拽平移、像素拾取(RGB/BGR 等)

YUV

  • 文件 → 打开 YUV...,需指定宽高与像素格式
  • 支持标尺、缩放平移、像素拾取、直方图等
  • 切换至其他主标签时会清空 YUV 视图

NALU 分析面板(右侧)

上方 Tab

Tab说明
十六进制选中帧或 NALU 后的 hex dump
云台控制PTZ 方向控制与标定;工具栏「云台 → 云台控制」显示/隐藏

下方 Tab

Tab说明
帧列表树形帧/NALU 列表,父节点 [I]/[P]/[B],子节点为 NALU
标定坐标手动标定后显示标定点表格
命令JSON 命令控制台(ipc:// 串流后自动建立通道)
  • Frame #N 为列表连续显示序号;pkt=N 为 demux 包序号(含义不同)
  • 按批加载(默认 50 帧/批),选中最后一帧或按 ↓ 继续加载
  • 选中帧:左侧预览图像;选中 NALU:hex 区显示单个 NALU

编码叠加(单视频)

仅在 单视频 标签时,顶部工具栏 叠加 / 量化 可用。

叠加(编码结构)

选项说明
编码树单元按 CU/CTU 类型着色
编码单元CU/CTU 划分网格
预测单元 / 变换单元PU/TU 划分线
索引编号块内序号

量化

选项说明
量化热力图按 QP 着色块填充
量化数值StreamEye 风格黄色 QP 数字;悬停显示白色边框与子划分
样本自适应偏移SAO 类型标签
运动矢量粉色箭头(P/B 帧更明显)
4K 提示:分辨率 > 1080p 时跳过全帧 HEVC CABAC,显示 CTU 级 slice QP,属正常行为。

媒体信息

通过 Tools → 媒体信息,或已加载媒体时 右键 → 详情 打开。

Tab内容
常规容器格式、文件大小、时长、播放状态、分辨率、平均 GOP
编解码器各流类型、编解码器、码率、分辨率、帧率、采样率等
统计已解码/显示帧数、丢帧、已读字节、容器码率(每 0.5s 刷新)

云台与 JSON 命令

云台面板

  • 位于右侧 云台控制 Tab;Tools → 云台 可快速切换
  • 速度滑块 1~100(默认 8);方向键 3×3 支持长按连续发送
  • ipc:// 设备通过 TCP 发送 {"module":"ptz","cmd":"set",...}
  • 工具栏 云台 → 云台:视频上浮动视场示意图(可拖动)
  • 手动标定:画面上拾取坐标,显示在标定坐标 Tab

命令 Tab

打开 ipc:// 串流后命令通道自动就绪,无需单独连接。上方显示 设备命令通道:host:port

预设命令

分类示例
设备sys ping/helpptz get/set/calibosd 1/0
本地ptz actionget ptz_positionget ptz_calibration

IPC 复用 TCP 帧格式

[1 字节 type][4 字节 length][payload]

type=1  双向 JSON(命令/应答)
type=2  设备→客户端 编码裸流(H264/HEVC)

请求与响应

// 请求
{"module":"ptz","cmd":"get"}

// 响应
{"result":0,"data":{...}}

发送快捷键:Ctrl+Enter。输出区以 模块 / 命令 标签 + 格式化 JSON 显示应答,并带时间戳。

普通 tcp:// 裸流没有 IPC 帧头,不能用于设备命令;请使用 ipc://

常用设备命令

命令说明
{"module":"sys","cmd":"ping"}连通性测试
{"module":"sys","cmd":"help"}列出可用 module/cmd
{"module":"ptz","cmd":"get"}读取云台位置
{"module":"ptz","cmd":"set","params":{"pan":1,"tilt":0}}手动转动
{"module":"ptz","cmd":"calib"}自动校准
{"module":"osd","cmd":"1"} / "0"开启/关闭 AI 目标框 OSD

使用提示

  1. RTSP 地址需以 rtsp:// 开头
  2. 本地 MP4/MKV 适合帧列表码流分析;直播流无总时长时不显示进度条
  3. 单视频:Frame List 滚到底选中最后一帧或按 ↓ 继续加载(勿在播放或暂停待恢复时依赖此操作)
  4. 单视频:暂停时可拖动进度条预览任意位置,松手后仍保持暂停
  5. 多视频:先点击要分析的窗口再使用 Frame List;仅一路有声音
  6. 编码叠加 仅在单视频标签可用;4K 为 CTU 级 QP
  7. IPC 设备:用 ipc://192.168.x.x 打开可同时预览视频并发送 JSON 命令
  8. SEI 检测框:勾选柱状图「SEI叠加」后才会画框