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

标签 c# android ios xamarin.forms

我正在使用 MediaManager 创建自定义跨平台视频播放器。 它播放来自 https 的视频,但我希望它播放来自本地存储的视频。

        var folder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        folder = Path.Combine(folder, "UserVideos/testvideo.mp4");
        videoPlayer.Source = folder;
        CrossMediaManager.Current.Play("file://" + "/UserVideos/testvideo.mp4");

我试过这种方式,但它无法播放视频。 文件夹 UserVideos 在主命名空间中。

最佳答案

请确认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");

我通过 Nuget 包安装 Plugin.MediaManager.Forms,然后在 Mainactivity.cs 中初始化:

CrossMediaManager.Current.Init(this);

主页.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");
    }

enter image description here

更新

如果要在Xamarin.ios中播放视频,请在Resource文件夹中添加视频,BuildActionBundleResource

然后像这样播放视频:

CrossMediaManager.Current.PlayFromResource("minions.mp4");

完整代码:

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");
        }

    }

这是 Github 中的示例:

https://github.com/CherryBu/VideoSample

关于c# - Xamarin.Forms MediaManager 从本地存储播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59723841/

相关文章:

c# - Asp.Net MVC C# 无法隐式转换类型问题

java - 将 Crosswalk 13+ 的用户代理更改为 Cordova 中的 webview

android - 保留 fragment 不保留

ios - NSNotificationCenter - 具有不同名称的相同观察者

ios - Xcode 中的特殊字符在编辑和查看模式下看起来不同

c# - 如何用 Ilnumerics 矩阵计算克罗内克和?

c# - 搜索只有 SID 的 AD

c# - 未触发异常过滤器

android - 访问远程执行Android代码

ios - Xamarin.iOS 应用程序在 iOS13 上启动时崩溃