Xamarin.Forms MediaManager 从本地存储播放视频

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

Che*_*SFT 6

请确认该文件testvideo.mp4是存储在内部存储还是外部存储中?从你的代码来看,我猜你想从内部存储中获取视频,但内部存储中的文件无法共享,你看不到它。

https://learn.microsoft.com/en-us/xamarin/android/platform/files/#internal-vs-external-storage

因此,当使用基于 file:// 的 URL 时,我建议您可以将视频复制到Assets 文件夹中,并且BuildActionAndroidAsset

然后像这样播放视频:

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文件夹中添加视频,BuildActionBundleResource

然后像这样播放视频:

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