wyb*_*bot 1 c# android ios xamarin.forms
我正在使用 MediaManager 创建自定义跨平台视频播放器。\n它从 https 播放视频,但我希望它从本地存储播放视频。
\n\n var folder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);\n folder = Path.Combine(folder, "UserVideos/testvideo.mp4");\n videoPlayer.Source = folder;\n CrossMediaManager.Current.Play("file://" + "/UserVideos/testvideo.mp4");\n
Run Code Online (Sandbox Code Playgroud)\n\n\xc2\xa0我尝试了这种方式,但它不播放视频。\n文件夹 UserVideos 位于主命名空间中。
\n请确认该文件testvideo.mp4
是存储在内部存储还是外部存储中?从你的代码来看,我猜你想从内部存储中获取视频,但内部存储中的文件无法共享,你看不到它。
https://learn.microsoft.com/en-us/xamarin/android/platform/files/#internal-vs-external-storage
因此,当使用基于 file:// 的 URL 时,我建议您可以将视频复制到Assets 文件夹中,并且BuildAction是AndroidAsset。
然后像这样播放视频:
CrossMediaManager.Current.Play("file:///android_asset/minions.mp4");
Run Code Online (Sandbox Code Playgroud)
我通过 Nuget 包安装Plugin.MediaManager.Forms ,然后在 Mainactivity.cs 中初始化:
CrossMediaManager.Current.Init(this);
Run Code Online (Sandbox Code Playgroud)
主页.xaml:
<StackLayout>
<video:VideoView HeightRequest="300" WidthRequest="200" />
<Button Text="play local video" Clicked="BtnPlayLocal_Clicked"/>
</StackLayout>
private void BtnPlayLocal_Clicked(object sender, EventArgs e)
{
CrossMediaManager.Current.Play("file:///android_asset/minions.mp4");
}
Run Code Online (Sandbox Code Playgroud)
如果你想在Xamarin.ios中播放视频,请在Resource文件夹中添加视频,BuildAction是BundleResource
然后像这样播放视频:
CrossMediaManager.Current.PlayFromResource("minions.mp4");
Run Code Online (Sandbox Code Playgroud)
完整代码:
private void BtnPlayLocal_Clicked(object sender, EventArgs e)
{
if (Device.RuntimePlatform == Device.iOS)
{
CrossMediaManager.Current.PlayFromResource("minions.mp4");
}
else if (Device.RuntimePlatform == Device.Android)
{
CrossMediaManager.Current.Play("file:///android_asset/minions.mp4");
}
}
Run Code Online (Sandbox Code Playgroud)
这是 Github 中的示例:
https://github.com/CherryBu/VideoSample