Contains core video processing functionality implementations:
CameraCapture class: Camera capture implementationCameraDataSender class: Camera data transmissionCameraDataReceiver class: Camera data receptionVideoFrameProvider class: Player core interface
H264Encoder class: H.264 encoderH264Decoder class: H.264 decoderH264NALUParser class: H.264 NALU parser
NetworkVideoSource class: Network video source implementation
SolidColorFrame class: Solid color frameColorFrameGenerator class: Solid color frame generator
Implements a YUV video player
RobotVisionTest project for testing related functional classes.
- Camera capture and video stream processing
- H.264 encoding/decoding
- TCP network transmission
- Timestamp processing
- Latency analysis
-
Camera Capture, H.264 Encoding and Decoding Test
- Function:
RunCameraCaptureTest() - Command line option:
--camera-test - Functionality: Tests complete camera capture, H.264 encoding and decoding process
- Process flow:
- Camera captures raw YUV frames
- Uses H.264 encoder for encoding
- Uses H.264 decoder for decoding
- Outputs decoded frame information (size and resolution)
- Usage example:
RobotVisionConsole.exe --camera-test
- Function:
-
Simple Camera Capture Test
- Function:
RunSimpleCameraCaptureTest() - Command line option:
--simple-capture - Functionality: Simple camera capture test, saves raw YUV frames to file
- Process flow:
- Camera captures raw YUV frames
- Directly writes YUV data to file
- Output file: captured_frames.yuv
- Usage example:
RobotVisionConsole.exe --simple-capture
- Function:
-
H.264 TCP Transfer Test
- Function:
runH264TCPTransferTest(int argc, char* argv[]) - Command line option:
--tcp-transfer [s|c] - Parameter description:
- s: Run server side
- c: Run client side
- Functionality: Tests H.264 encoded TCP transmission process
- Process flow:
- Client: Camera capture -> H.264 encoding -> TCP transmission
- Server: TCP reception -> H.264 decoding -> Save YUV file
- Output file: decoded_frames.yuv
- Usage example:
# Server side RobotVisionConsole.exe --tcp-transfer s # Client side RobotVisionConsole.exe --tcp-transfer c
- Function:
-
Complete Camera Capture, H.264 Encoding, TCP Transmission Test
- Function:
runH264TCPCameraCaptureTest(int argc, char* argv[]) - Command line option:
--tcp-camera c - Parameter description:
- c: Run client side
- Functionality: Tests complete camera capture, H.264 encoding, TCP transmission process
- Process flow:
- Client: Camera capture -> H.264 encoding -> TCP transmission
- Server: TCP reception -> H.264 decoding -> Real-time display
- Supports continuous capture mode
- Usage example:
- PC (ZED) -> PC
# Server side appVideoPlayer.exe --ip {LOCAL_IP} --port 12345 # Client side RobotVisionConsole.exe --tcp-camera c
- PC (ZED) - VR
# Headset side Open XRoboToolkit Unity App, Select ZEDMINI, Click Listen # PC side RobotVisionConsole.exe --tcp-camera -c --ip {HEADSET_IP} --port 12345 --width 1280 --height 720 --fps 60 --bitrate 4000000
- Function:
-
Latency Analysis Test
- Function:
analyzeDelay(int argc, char* argv[]) - Command line option:
--analyze-delay - Functionality: Analyzes latency at various stages of video processing
- Process flow:
- Reads log file (Messages.dblog)
- Analyzes latency for 6 processing stages:
- Camera capture
- YUV420 conversion
- H.264 encoding
- TCP transmission
- H.264 decoding
- Frame display
- Generates CSV format latency analysis report (output.csv)
- Usage example:
RobotVisionConsole.exe --analyze-delay
- Function:
The project uses CMake build system and mainly contains two executables:
- VideoPlayer: Video player application
- RobotVisionTest: Test project
Build dependencies:
- Qt framework
- FFmpeg library
- CMake 3.10 or higher
- C++17 or higher compiler
- ASIO library (for network communication)
Before building, ensure the following environment is correctly configured:
-
Visual Studio 2019 Community (located at
D:\MyProgram\Microsoft Visual Studio\2019\Community) -
Qt 6.6.2 (located at
D:\MyProgram\Qt6\6.6.2\msvc2019_64)Installation Guidance
- Install Qt Online Installer
- Select Custom Installation
- Select
- Qt 6.6.x
- MSVC 2019 64-bit
- Qt Quick 3D
- Qt 5 Compatibility Module
- Qt Shader Tools
- Additional Libraries
- Qt 3D
- Qt Charts
- Qt Graphs (TP)
- Qt Multimedia
- Qt Positioning
- Qt Quick 3D Physics
- Qt Quick Effect Maker
- Qt WebChannel
- Qt WebEngine
- Qt WebSockets
- Qt WebView
- Qt Quick TimeLine
- Build Tools
- CMake
- Ninja
- Qt 6.6.x
- Install
-
FFmpeg 7.1 (located at project root directory
../../ffmpeg-7.1-full_build-shared) -
ASIO 1.30.2 (located at project root directory
../../asio-1.30.2)
VideoPlayer is a Qt-based video player application that can be built in the following ways:
The project provides an automatic build script VideoPlayer\build_release.bat. Executing this script will automatically complete the following steps:
- Create
build_releasedirectory - Configure Qt environment
- Generate Visual Studio project files using CMake
- Compile project to generate executable
After building, the executable will be located at VideoPlayer\build_release\Release\appVideoPlayer.exe
RobotVisionTest is a console application for testing video processing functionality that can be built in the following ways:
The project provides an automatic build script RobotVisionTest\build_release.bat. Executing this script will automatically complete the following steps:
- Create
build_releasedirectory - Configure FFmpeg and ASIO environment
- Generate Visual Studio project files using CMake
- Compile project to generate executable
After building, the executable will be located at RobotVisionTest\build_release\Release\RobotVisionConsole.exe
-
ZED sdk is required to compile the VideoTransferPC program.
-
For the windows version
-
It requires Visual Studio 2019.
-
The VideoPlayer project depends on Qt 6.6.3, see the
build_release.batfile for more details.
If you find this project useful, please consider citing it as follows.
@article{zhao2025xrobotoolkit,
title={XRoboToolkit: A Cross-Platform Framework for Robot Teleoperation},
author={Zhigen Zhao and Liuchuan Yu and Ke Jing and Ning Yang},
journal={arXiv preprint arXiv:2508.00097},
year={2025}
}