MediaPlayerElement
See Microsoft API reference for MediaPlayerElement.
Media formats
Supported Formats | iOS | Android | Wasm | Skia GTK | Skia Desktop | Remarks |
---|---|---|---|---|---|---|
Local/Remote MP3 Support | ✅ | ✅ | ✅ | ✅ | ❌ | |
Local/Remote MPEG4 Support | ✅ | ✅ | ✅ | ✅ | ❌ | |
HLSv3 Support | ✅ | ✅ | ✅ | ✅ | ❌ | |
HLSv4 Support | ✅ | ✅ | ✅ | ✅ | ❌ | |
3GP Support | ✅ | ✅ | ✅ | ✅ | ❌ | 3GP with AMR Narrow Band (SAMR) audio codec does not work on iOS (See notes) |
FLV Support | - | ✅ | ✅ | ✅ | ❌ | |
MOV Support | ✅ | - | - | - | ❌ | |
MKV Support | - | ✅ | ✅ | ✅ | ❌ | |
AVI Support | - | ✅ | ✅ | ✅ | ❌ | |
OGG Support | - | - | ✅ | ✅ | ❌ | |
MPEG-Dash Support | - | - | - | - | ❌ | |
Smooth Streaming Support | - | - | - | - | ❌ |
Notes
- Uno's MediaPlayerElement relies on AVPlayer for iOS and AndroidMediaPlayer for Android. Please, refer to those native players documentation for more information about supported audio and video formats.
- If you need to set source programmatically (i.e., using
_mediaPlayerElement.Source = [source]
), please note that only sources created withMediaSource.CreateFromUri()
are currently supported.
Features
Section | Feature | iOS | Android | Wasm | Skia GTK | Skia Desktop | Remarks |
---|---|---|---|---|---|---|---|
MediaPlayerElement | AutoPlay | ✅ | ✅ | ✅ | ✅ | ❌ | |
Poster image | ✅ | ✅ | ✅ | ✅ | ❌ | Does not show when playing music | |
Enable/Disable MediaTransportControls | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Stretch | ✅ | ✅ | ✅ | ✅ | ❌ | Stretch.None behave like Stretch.Fill on iOS | |
Pause media when headphones unplugged | ✅ | ✅ | - | - | ❌ | ||
TransportControls | Transport controls custom style | ✅ | ✅ | ✅ | ✅ | ❌ | |
Play/Pause | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Stop | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Seek | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Volume change | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Mute | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Show elapsed time | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Show remaining time | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Show/Hide MediaTransportControls automatically | ✅ | ✅ | ✅ | ✅ | ❌ | ||
MediaTransportControls compact mode | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Show/Hide MediaTransportControls commands | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Enable/Disable MediaTransportControls commands | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Skip forward | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Skip backward | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Show buffering progress | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Zoom mode | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Full-screen mode | ✅ | ✅ | ✅ | ✅ | ❌ | ||
Playlists support | ✅ | ✅ | - | - | ❌ | ||
Change playback rate | - | - | ✅ | ✅ | ❌ | ||
Player controls on locked screen support | - | - | - | - | ❌ | ||
Subtitles support | - | - | - | - | ❌ | ||
Languages support | - | - | - | - | ❌ |
Requirement
iOS
Add the following to your info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
</dict>
Note: Don't just copy/paste, but properly setup NSAppTransportSecurity
as required by your project
Android
Add the following to your AndroidManifest.xml
<!-- Required to play remote media -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Required to keep the screen on while playing -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
WebAssembly
Using the MediaPlayerElement
on WebAssembly head requires adding the Uno.WinUI.MediaPlayer.WebAssembly
package to the MyApp.Wasm
project.
Important
The Uno.WinUI.MediaPlayer.WebAssembly
package version must use the same version as the other Uno.WinUI.*
packages in your project.
Note
When using UWP APIs and the Uno.UI.*
packages, you'll need to install the Uno.UI.MediaPlayer.WebAssembly
package instead.
Skia.GTK
Using the MediaPlayerElement
on the Skia+GTK head requires adding the Uno.WinUI.MediaPlayer.Skia.Gtk
package to the MyApp.Skia.Gtk
project.
Important
The Uno.WinUI.MediaPlayer.Skia.Gtk
package version must use the same version as the other Uno.WinUI.*
packages in your project.
Note
When using UWP APIs and the Uno.UI.*
packages, you'll need to install the Uno.UI.MediaPlayer.Skia.Gtk
package instead.
Skia+GTK on Linux
The MediaPlayerElement
support is based on libVLC, and needs the system to provide the appropriate libraries to work properly.
You'll need to install the following packages (Debian based distros):
sudo apt-get install libvlc-dev libx11-dev vlc libgtk2.0-0 libx11dev
Skia+GTK on Windows
Running the MediaPlayerElement
requires adding the VideoLAN.LibVLC.Windows
package to your application.
Future improvement
- Support for Skia Desktop
net8.0-desktop
- React to audio focus changes (pause/stop playback or reduce audio volume)
- Subtitles support
- Languages support
- Buffering of next playlist element when using MediaPlaybackList
- Cast to device
- Playlist for Wasm
- Download option
Known issues
[iOS]
Volume flyout does not display (Uno issue)[All]
Dynamic width/height not supported when playing audio[All]
Sometimes flickers during resizing when using dynamic width/height