A professional audio-video player built in Rust using FFmpeg and Slint UI. Features a modern interface with full playback controls, audio support, and cross-platform compatibility.
- Multiple Input Sources: Play videos from URLs or local files
- Format Support: MP4, MKV, AVI, MOV, WebM, FLV, WMV, M4V
- High-Quality Rendering: Hardware-accelerated video decoding with FFmpeg
- Aspect Ratio Preservation: Videos display with correct proportions
- Full Audio Support: Synchronized audio-video playback
- Volume Control: Real-time volume adjustment with slider
- Multi-format Audio: Supports various audio codecs
- Audio-Video Sync: Proper synchronization between audio and video
- Play/Pause/Stop: Full playback control
- Seek Bar: Jump to any position in the video
- Time Display: Current time and total duration
- Volume Slider: 0-100% volume control with percentage display
- Status Indicators: Real-time playback status updates
- Professional Design: Clean, dark-themed interface
- Responsive Layout: Adapts to different window sizes
- Loading Animations: Visual feedback during video loading
- File Browser: Native file selection dialog
- URL Input: Direct video URL support
Rust: Install from rustup.rs
FFmpeg Development Libraries:
# Linux (Debian/Ubuntu)
sudo apt update
sudo apt install clang libavcodec-dev libavformat-dev libavutil-dev libavfilter-dev libavdevice-dev libasound2-dev pkg-config
# macOS (Homebrew)
brew install pkg-config ffmpeg
# Windows (vcpkg)
vcpkg install ffmpeg --triplet x64-windows- Clone and Build:
git clone https://github.com/JeninSutradhar/ffmpeg-VideoPlayer-Rust_Slint
cd ffmpeg-VideoPlayer-Rust_Slint
cargo build --release- Run the Player:
cargo run --release
# or
./target/release/ffmpeg- Load Content:
- From URL: Paste video URL and click "Load URL"
- From File: Click "Browse" to select local video file
-
URL Playback:
- Paste any video URL in the input field
- Click "Load URL" to start playback
- Supports YouTube, direct video links, etc.
-
Local Files:
- Click "📁 Browse" button
- Select video file from file dialog
- Video starts playing automatically
- ▶ Play/⏸ Pause: Toggle playback
- ⏹ Stop: Stop video and reset
- Seek Bar: Drag to jump to any position
- 🔊 Volume: Adjust audio level (0-100%)
- Time Display: Shows current/total time
- FFmpeg: Video/audio decoding and processing
- Slint UI: Modern, cross-platform user interface
- CPAL: Cross-platform audio output
- Ring Buffer: Smooth audio streaming
- Threading: Separate threads for UI, video, and audio processing
- Hardware Acceleration: Uses FFmpeg's optimized decoders
- Memory Efficient: Streaming playback with minimal memory usage
- Real-time Processing: Low-latency audio-video synchronization
- Cross-platform: Native performance on all supported platforms
- ✅ Linux (Tested)
- ✅ Windows
- ✅ macOS
- 🔄 Android (Planned)
- 🔄 WebAssembly (Planned)
- MP4, MKV, AVI, MOV, WebM, FLV, WMV, M4V
- H.264, H.265, VP8, VP9, AV1
- Any format supported by FFmpeg
- AAC, MP3, FLAC, OGG, WAV
- Any audio codec supported by FFmpeg
# Debug build
cargo build
# Release build (recommended)
cargo build --release
# Run tests
cargo testffmpeg-next: FFmpeg bindings for Rustslint: Modern UI frameworkcpal: Cross-platform audio libraryringbuf: Lock-free ring buffer for audiorfd: Native file dialogs
- Seeking functionality is implemented but may need refinement
- Some exotic video formats may not work perfectly
- WebAssembly support is planned but not yet implemented
Contributions are welcome! Please feel free to:
- Report bugs and issues
- Suggest new features
- Submit pull requests
- Improve documentation
This project is licensed under the MIT License - see the LICENSE file for details.
- FFmpeg - The multimedia framework
- Slint - The UI framework
- CPAL - Cross-platform audio library
- Rust Community - For the amazing ecosystem
Made with ❤️ in Rust