基于.NET Standard的Xamarin.Forms应用如何播放网络视频?
适配.NET Standard的Xamarin.Forms远程视频播放方案
嘿,针对你用.NET Standard开发Xamarin.Forms应用时遇到的远程视频播放问题,我整理了几个亲测有效的方案,完美避开那些基于.NET Framework的PCL限制:
方案一:原生平台渲染器(性能最优推荐)
Xamarin.Forms本身没内置视频播放控件,咱们可以针对iOS和Android分别封装原生播放器,然后在.NET Standard共享项目里统一调用,兼容性拉满:
Android端(用ExoPlayer)
- 给Android项目装ExoPlayer的NuGet包(选支持.NET Standard的版本就行)
- 写个自定义渲染器,继承
ViewRenderer<YourCustomVideoView, SimpleExoPlayerView> - 在渲染器里初始化播放器并加载远程URL:
var uri = Android.Net.Uri.Parse(YourVideoUrl); var mediaItem = MediaItem.FromUri(uri); _player.SetMediaItem(mediaItem); _player.Prepare(); _player.Play();
iOS端(用AVPlayer)
- iOS项目里写自定义渲染器,继承
ViewRenderer<YourCustomVideoView, AVPlayerViewController> - 初始化AVPlayer加载视频:
var playerItem = AVPlayerItem.FromUrl(new NSUrl(YourVideoUrl)); var player = new AVPlayer(playerItem); Controller.Player = player; player.Play();
.NET Standard共享项目
创建一个自定义VideoPlayerView控件,定义VideoUrl绑定属性,这样在XAML里就能直接用:
public class VideoPlayerView : View { public static readonly BindableProperty VideoUrlProperty = BindableProperty.Create(nameof(VideoUrl), typeof(string), typeof(VideoPlayerView)); public string VideoUrl { get => (string)GetValue(VideoUrlProperty); set => SetValue(VideoUrlProperty, value); } }
方案二:WebView嵌入HTML5播放(最简单跨平台)
如果你的视频是MP4这类HTML5支持的格式,直接用WebView加载个极简HTML页面就行,零原生依赖,完美适配.NET Standard:
XAML里加个WebView:
<WebView x:Name="VideoWebView" HeightRequest="300" />
后台代码加载播放页面:
var html = $@" <html> <body style='margin:0;padding:0;'> <video width='100%' height='100%' controls autoplay> <source src='{YourVideoUrl}' type='video/mp4'> </video> </body> </html>"; VideoWebView.Source = new HtmlWebViewSource { Html = html };
这个方案唯一的小缺点是没法精细控制播放逻辑(比如自定义进度条、播放回调),但满足基础播放需求完全够用。
方案三:适配.NET Standard的跨平台插件
要是你不想自己写原生代码,试试这两个插件:
- 先重新安装MediaManager的最新版本,现在它已经支持.NET Standard 2.0+了,之前的兼容性问题应该已经修复,调用也简单:
await CrossMediaManager.Current.Play(YourVideoUrl);
- 要是这个还是不行,换Xamarin.Plugins.VideoPlayer,专门针对.NET Standard开发的,API简洁好用。
内容的提问来源于stack exchange,提问作者neqopa
相关产品推荐
相关产品推荐

