A modular cross-platform multimedia player SDK with production-grade audio-video synchronization.
Aurora consists of two main components:
-
lmplayer: A cross-platform multimedia player SDK featuring:- FFmpeg-based decoding pipeline
- Production-quality AV synchronization (audio master clock)
- Plugin architecture for decoders and renderers
- Thread-safe queue-based data flow
- Hardware audio position query support (WASAPI/PulseAudio)
-
aurora: Desktop player application with Qt6 GUI (work in progress)
Project Status: π§ Active Development - Core playback engine complete, GUI in progress
- β
Multi-format support:
- Video: H.264/HEVC/VP8/VP9/MPEG-4 (AV1 with hardware acceleration)
- Audio: AAC/MP3/Opus/FLAC
- Containers: MP4, MKV, WebM, MPEG-TS
- β Precise AV synchronization: Audio master clock with hardware position query
- β Flexible rendering: Custom renderer interface (supports dummy/file/Qt/platform-specific)
- β Playback control: Play/Pause/Seek/Speed control (0.5x-2.0x)
- β Real-time & fast modes: Configurable playback rate (0.0 = max speed)
- β Dynamic format conversion: Decoder adapts to renderer's preferred format
- β Plugin system: Runtime decoder/renderer registration
media_dump: Extract raw YUV/PCM data for testing and analysis
- Operating System: Linux, macOS, Windows
- C++ Compiler: GCC 7+, Clang 6+, MSVC 2017+
- CMake: 3.10+
- FFmpeg: 4.4+ (Required)
- libavformat >= 58.0
- libavcodec >= 58.0
- libavutil >= 56.0
- libswresample >= 3.0
- Qt 6.2+: For desktop GUI application
aurora/
βββ lmplayer/ # Core player SDK
β βββ include/ # Public API headers
β βββ src/core/ # Core implementation
β βββ src/renderer/ # Platform renderers (WASAPI/PulseAudio)
β βββ tests/ # Unit tests
βββ app/ # Desktop GUI application (Qt6)
βββ tools/
βββ media_dump/ # Media data extraction tool
We provide cross-platform build scripts for convenience:
# Linux/macOS
./scripts/build.sh # Debug build
./scripts/build.sh Release # Release build
./scripts/run.sh # Run Aurora Player
# Windows (PowerShell)
.\scripts\build.ps1 # Debug build
.\scripts\build.ps1 Release # Release build
.\scripts\run.ps1 # Run Aurora Player
# Clean build artifacts
./scripts/clean.sh # Linux/macOS
.\scripts\clean.ps1 # Windows# Install dependencies
sudo apt update
sudo apt install build-essential cmake pkg-config
sudo apt install libavformat-dev libavcodec-dev libavutil-dev libswresample-dev libswscale-dev
sudo apt install libpulse-dev # For audio hardware position query
sudo apt install qt6-base-dev # Optional, for GUI
# Build
mkdir build && cd build
cmake ..
make -j$(nproc)
# Run tests
ctest --output-on-failure
# Install (optional)
sudo make install# Install dependencies via Homebrew
brew install cmake pkg-config ffmpeg qt@6
# Build
mkdir build && cd build
cmake -DCMAKE_PREFIX_PATH=/opt/homebrew/opt/qt@6 ..
make -j$(sysctl -n hw.ncpu)
# Run tests
ctest --output-on-failure# Install dependencies via vcpkg
vcpkg install ffmpeg:x64-windows qt6-base:x64-windows
# Build
mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=[vcpkg-root]/scripts/buildsystems/vcpkg.cmake ..
cmake --build . --config Release
# Run tests
ctest -C Release --output-on-failureFor detailed SDK usage, see lmplayer/README.md.
The media_dump tool extracts raw media data for testing and analysis:
# Fast decode mode (decode as fast as possible)
./build/tools/media_dump/media_dump video.mp4
# Real-time mode with AV sync (simulates actual playback)
./build/tools/media_dump/media_dump --realtime video.mp4
# Custom output directory
./build/tools/media_dump/media_dump video.mp4 ./my_output/
# Output files:
# - ./output/video/frame_000000.yuv : YUV420P frames (contiguous, 1280x720 = 1.38MB each)
# - ./output/audio.pcm : S16LE PCM (48kHz, 2ch, interleaved)Playback modes:
- Fast mode (default): Decode at maximum speed, no timing control
- Real-time mode (
--realtime): Follow video's actual frame rate with AV sync
Use cases:
- SDK functionality testing
- Decoder correctness verification
- Raw data extraction for analysis
- AV sync quality evaluation
- Performance benchmarking
- Public headers:
lmplayer/include/lmplayer/ - Main API: See
player.hfor player control interface - Custom renderers: See
renderer.hfor renderer interface - Error codes: See
error_code.hfor all status codes - Media types: See
media_info.hfor format definitions
Copyright (c) 2026 SHAO Liming
Aurora is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the LICENSE file for more details.
Contributions are welcome! Please ensure:
- Code follows existing style (C++17, clang-format)
- All tests pass (
make test) - New features include unit tests
- Commit messages are descriptive
- Author: SHAO Liming
- Email: lmshao@163.com
- Issues: GitHub Issues