基于AvaloniUI创建MediaPlayer, 根据系统平台集成相应的媒体播放器
此方案是考虑不同系统使用不同的媒体播放器,包括第三方的播放器, 如 Android
的 ExoPlayer
或者IjkPlayer
等。。
个人认为可以考虑下面的方案,有兴趣的小伙伴可以一起交流下, 即:
- Window ->
NativeControlHost
+Overlap Window
- Linux ->
MPV with OpenGL
- Android ->
MPV with OpenGL
orExoPlayer
orIjkPlayer
- MacOS -> 目前未测试不了解, 理论上支持
MPV
- IOS -> 目前未测试不了解, 理论上支持
MPV
注: 此种方案可以实现不同的系统上采用最适合的播放器,并且定制性很高,但是也是最复杂的方式,需要考虑以下几点:
- 不同系统平台的编解码器不尽相同 (不同播放源统一, 需要考虑备用播放方式)
- 相同系统平台在某些设备上不支持某些播放器特性(如硬件加速等。。) 需要为播放器支持降级
- 嵌入第三方播放器或者
NativeControlHost
, 在上层的控件无法使用原生AvaloniaUI
控件的情况 - 不同系统平台之间可能并不一定需要采用
Overlap Window
方案
3. MPV 播放器
MPV是一个基于MIT
协议的免费,开源,跨平台的媒体播放器,并支持GPU视频编解码,高质量的视频输出,支持基于OpenGL
,Valkan
,D3D11
的视频输出等。。
使用基于.Net包装的Mpv播放器库,并支持运行Window
, Linux
, Android
, MacOS
(未测试,理论支持), Ios
(未测试,理论支持), 原生支持在播放器之上叠加控件(基于喂ImageSource
方式)
在这里测试了 LibMpv
播放库, 在Sample
中,已经加入了Avalonia
的例子。并支持OpenGL
,NativeControlHost
,Software
三种方式渲染,用于兼容不同系统平台. 基于应用上的考虑,我个人觉得在MPV之上再进行封装,当程序跑在Window
基于NativeControlHost
来实现更好的效果。
注: Ubuntu下测试需要安装 sudo apt install libmpv-dev libmpv2
.