- Simple and powerful API set
- Cross platform: Windows(x86, arm), UWP, Linux, macOS, Android, iOS, tvOS, visionOS, Raspberry Pi
- Hardware accelerated decoders
- 0-copy GPU rendering for all platforms and all renderers(Vulkan is WIP.)
- Dynamic OpenGL
- OpenGL, D3D11, D3D12, Vulkan and Metal rendering w/ or w/o user provided context
- Integrated with any platform native ui apps, gui toolkits or other apps via OpenGL, D3D11/12, Vulkan and Metal (WinUI3, OBS, Flutter, Qt, SDL, GLFW, SFML, .NET Avalonia etc.) easily
- HDR display, HDR to SDR and SDR to HDR tone mapping. You can use HDR display in Qt6(6.6+ for macOS, 6.x for windows), OBS Studio and more.
- Dolby Vision rendering, including Profile 5. Support HEVC and AV1.
- Seamless/Gapless media and bitrate switch for any media
- Optimized Continuous seeking. As fast as mpv, but much lower cpu, memory and gpu load. Suitable for timeline preview
- Subtitle rendering, including ass, plain text, bitmap, closed caption
- Smart FFmpeg runtime, dynamic load, binary compatible with 4.0~7.x
- Professional codecs: GPU accelerated HAP codec rendering, Blackmagic RAW, R3D
SDK is built with
- ffmpeg: https://sourceforge.net/projects/avbuild/files/android/ffmpeg-master-android-clang-lite-lto.tar.xz/download
- ndk 27
- requires ndk r23 and later because of ndk abi break in r23
SDK can be used by any C or C++11 compiler, e.g. g++, clang
dsym files are debug symbols, not required to deploy your programe.
- OpenGL ES2/3
- Vulkan
- Create by mdk: use SurfaceView's Surface to initialize rendering thread
- Created by user: use GLSurfaceView, TextureView or whatever
- FFmpeg
- MediaCodec: FFmpeg mediacodec implementation
- AMediaCodec: builtin mediacodec implementation, using libmediandk or java api
MediaCodec/AMediaCodec decoder will not be destroyed if app go to background, and continues to work when resumed.
- OpenSLES
- AudioTrack (default)
content:
android.resource:
assets:
include(mdk-sdk-dir/lib/cmake/FindMDK.cmake)
target_link_libraries(your_target PRIVATE mdk)
include($$MDK_SDK_DIR/mdk.pri)
SetGlobalOption("JavaVM", JvmPtr); // REQUIRED
player.setDecoders(MediaType::Video, {"AMediaCodec", "FFmpeg", "dav1d"});
- some examples using mdk sdk
- OBS Studio plugin
- QtMultimedia plugin
- MFT decoder module
- dav1d decoder module
- Android java wrapper and example
- libmediandk and other java classes implemented in C++
- JNI Modern Interface
Copyright (c) 2016-2024 WangBin(the author of QtAV) Free for opensource softwares, non-commercial softwares, flutter, QtAV donors and contributors.