![Build status github](https://github.com/wang-bin/mdk-sdk/workflows/Build/badge.svg)
![Build Status](https://dev.azure.com/kb137035/mdk/_apis/build/status/mdk-CI-yaml?branchName=master)
Download Nightly Build SDK
Sourceforge
Github Releases
NuGet![NuGet](https://img.shields.io/nuget/dt/mdk)
Changelog.
API
Features
- 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, nvJPEG2000
Install
CMake
include(${MDK_SDK_DIR}/lib/cmake/FindMDK.cmake)
target_link_libraries(your_target PRIVATE mdk)
Qt qmake
include($$MDK_SDK_DIR/mdk.pri)
CocoaPods
(Objective-)C/C++ Users
pod 'mdk'
Optionally you can use mdk.xcframework directly.
If fail to code sign: In Build Phase
, add a New Run Script Phase
with content
[ -n "$CODE_SIGN_IDENTITY" ] && find "$BUILT_PRODUCTS_DIR" -depth -name "lib*.dylib" -exec codesign -f -vvvv -s"${EXPANDED_CODE_SIGN_IDENTITY}" ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements,flags {} \;
Swift Users
pod 'swift-mdk'
and add
import swift_mdk
Nuget
Install via NuGet in Visual Studio for both Windows desktop and UWP
Distribute
- mdk(libmdk.so.0/ibmdk.dylib/mdk.dll) and ffmpeg library(or standard ffmpeg libraries) are always REQUIRED
- libass.dll/libass.dylib/ass.framework/libass.so can be optional if not using subtitle rendering
- mdk-braw.dll/libmdk-braw.{so,dylib}: optional, for blackmagic raw videos
- mdk-r3d.dll/libmdk-r3d.{so,dylib}: optional, for RED raw videos
- mdk.pdb/libmdk.so*.dsym: debug symbols.
- Add libdav1d.dll/libdav1d.dylib/dav1d.framework/libdav1d.so from to support av1 software decoding
Documents
Recommended settings
- macOS, iOS:
player.setDecoders(MediaType::Video, {"VT", "hap", "FFmpeg", "dav1d"});
- Windows:
player.setDecoders(MediaType::Video, {"MFT:d3d=11", "D3D11", "CUDA", "hap", "FFmpeg", "dav1d"});
- Linux:
// XInitThreads(); // If using x11. before any x11 api call. some gui toolkits already call this, e.g. qt, glfw
SetGlobalOption("X11Display", DisplayPtr); // If using x11. Requred by VAAPI, VDPAU
player.setDecoders(MediaType::Video, {"VAAPI", "VDPAU", "CUDA", "hap", "FFmpeg", "dav1d"});
- Raspberry Pi: use mdk-sdk-linux.tar.xz, delete libffmpeg.so.* to use system ffmpeg to support h264, hevc hardware decoder and 0-copy rendering
player.setDecoders(MediaType::Video, {"V4L2M2M", "FFmpeg:hwcontext=drm", "FFmpeg"});
- Android:
SetGlobalOption("JavaVM", JvmPtr); // REQUIRED
player.setDecoders(MediaType::Video, {"AMediaCodec", "FFmpeg", "dav1d"});
Open Source
Modules and Dependencies
Examples and Plugins for Other Frameworks
Language Bindings
Sponsors
![Sportimization](https://www.sportimization.com/assets/images/logo_sportimization_small.png)
Users
![smartplayer](https://static.tildacdn.com/tild3730-3634-4463-a464-333634323465/Group_20.svg)
![](https://teleguard.com/images/logo.png)
金嵘达科技
爱玩宝
License
- Free for opensource projects, QtAV donors and contributors: you can acquire a key from me. Can be commercial software
- Free for Flutter users. A key is already included. Can be commercial softwares.
- Free for other non-commercial users: you can acquire a key from me.
- Commercial license for other users: a key for an app for a single platform or multiple platforms.
- Other users without a key: make sure your sdk is updated, otherwise you may see an QR image in the last frame.
License key generator and validator is open source