【问题标题】:Windows store 8 app - Playing files from NAS driveWindows store 8 应用程序 - 从 NAS 驱动器播放文件
【发布时间】:2015-08-12 17:39:26
【问题描述】:

如果我有大约 1000 部电影,我已经为家里的孩子创建了一个连接到我的 Drobo 的小应用程序。该应用程序获取这些电影的所有信息并将信息存储在 SQLite 数据库中。

我无法使用 MediaElement 控件从文件路径播放媒体。

我在 MVVM 中使用 c#,我遇到的问题是,大多数示例向您展示了如何选择文件并使用流播放它。这很好,但我不希望孩子(2 岁和 5 岁)每次都这样做。

为了避免这种情况,我将文件位置存储在我的数据库中,即 192.168.1.3\Movies\Micky Mouse.mp4

我创建了代码以使用 URI 设置源并将控件源 (xaml) 绑定到属性。你可以猜到媒体没有播放。

如果我将媒体放入本地存储,它可以正常播放,所以我知道问题与访问权限直接相关。我发现,如果我选择文件夹位置并播放电影说 5 分钟后它会播放,但是如果我第二天尝试这样做,视频不会播放。

对我来说,NAS 驱动器似乎有一个定时访问令牌。

这里有没有人使用 URI(文件路径)在本地存储之外实现视频播放

感谢您的指导

【问题讨论】:

  • 如果我有大约 1000 部电影听起来合法
  • 是的,它们是合法的,在过去的 10 年里,我收藏了大量的 DVD 和蓝光,在过去的 6 年里,我和我的 2 个孩子一起收藏了很多。顺便说一句,我开始在花园里建造一个家庭影院来存放我们自己和我的家人可以享受的这个系列。您可以从 CEX 以不到 1 英镑的价格购买 DVD。我更喜欢拥有 DVD/蓝光的硬拷贝,而数字格式纯粹用于收藏管理。我什至为此做了一个桌面应用程序sourceforge.net/projects/movee8/?source=directory不是每个人都想使用种子下载!
  • 好的,回到主题。我在 Windows 商店应用程序中遇到过 FutureAccessList,它允许添加 1000 个位置。可以访问文件夹、其子文件夹和文件,但媒体仍未播放,但我不再收到访问权限错误。有什么想法吗?
  • 这太扯了 :)

标签: c# video mvvm windows-store-apps mediaelement


【解决方案1】:

文件/文件夹选择器需要授予初始权限,一旦授予,将文件添加到未来的访问列表中。

private async void ChooseFile()
    {

        FileOpenPicker openPicker = new FileOpenPicker();
        openPicker.ViewMode = PickerViewMode.Thumbnail;
        openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
        openPicker.FileTypeFilter.Add(".wmv");
        openPicker.FileTypeFilter.Add(".jpeg");
        openPicker.FileTypeFilter.Add(".png");

        StorageFile file = await openPicker.PickSingleFileAsync();

        if (file != null)
        {
            Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.Add(file, "Test");
        }
        else
        {
            // The file picker was dismissed with no file selected to save
        }

}

如何获取文件并播放媒体

foreach (AccessListEntry itm in StorageApplicationPermissions.FutureAccessList.Entries)
            {
                if (itm.Metadata == "Test")
                {
                    StorageFile actualFile = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(itm.Token);

                    var stream = await actualFile.OpenAsync(FileAccessMode.Read);

                    mediaPlayer.SetSource(stream, actualFile.ContentType);
                    mediaPlayer.Play();
                }
            }

这是一个严重的问题,我相信很多人都会喜欢这个解决方案:)

@will 即使您的评论毫无意义,我非常感谢您查看

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 2010-11-30
    • 1970-01-01
    相关资源
    最近更新 更多