1

在我的 uwp 应用程序中,我正在从KnownFolder.VideoLibrary获取视频文件,并且我正在使用QueryOptions来获取它们,因此我正在尝试使用它AdvancedQuerySyntax以便我只获取视频文件,但我实际上正在获取像srt这样的字幕文件也是。我在这里做错了什么?我写的 AQS 语法错了吗?我认为根据这种语法 subs 文件也被视为视频文件,有没有办法可以将其缩小到仅获取不包括字幕文件的视频文件?或者我可以获得一个文档链接,我可以知道扩展类型列表是什么,这种语法实际上会返回?所以我可以相应地管理它吗?

代码

            videoFileOptions = new QueryOptions()
            {
                IndexerOption = IndexerOption.OnlyUseIndexerAndOptimizeForIndexedProperties//check sort order later               
            };
            string videoFilter = "System.Kind:=System.Kind#Video";
            videoFileOptions.ApplicationSearchFilter += videoFilter;
            videoFileOptions.SetPropertyPrefetch(PropertyPrefetchOptions.VideoProperties, RequiredVideoProperties);
            videoFileOptions.SetThumbnailPrefetch(ThumbnailMode.VideosView, thumbnailRequestedSize, ThumbnailOptions.UseCurrentScale);

这是我提供过滤器的行。

string videoFilter = "System.Kind:=System.Kind#Video";

4

1 回答 1

1

简短回答:.srt 和其他字幕文件被归类为视频文件,因为任何支持播放的应用程序都可能需要访问 srt 文件。

您可以添加应用程序搜索过滤器ext:<>.srt以从结果中删除 srt 文件。

长答案:不可避免的问题是为什么没有另一种类型的 Kind:Subtitles 之类的?为什么将它们包含在 Kind:Video 中?

除了“这个扩展作为视频有意义吗”之外,还有另一个压力在 Kind 映射上?这一切都回到了 Windows Phone 上的 SD 卡访问。

对于 Windows 8,访问 SD 卡的现代应用程序必须为他们希望在 SD 卡上看到的任何文件类型声明文件启动体验。例如,这意味着视频应用程序需要 mp4、avi 等文件启动体验。但是,在 Windows Phone 上这不起作用,因为应用程序无法覆盖 mp4 或 avi 的默认系统应用程序(另一天这里有另一个故事)。所以我们需要另一种方式来让应用程序访问 SD 卡上的 mp4 文件。

解决方案是,由于 UI 已经说过“授予此应用程序访问视频和您的 SD 卡的权限”,那么任何具有视频库功能和 SD 卡访问权限的应用程序都应该可以访问您 SD 卡上 Kind.Video 的所有文件。因此 Kind.Video 不仅意味着“视频文件”,还意味着“视频应用程序想要访问的文件”。

有了这个稍微改变的定义,这意味着内置视频播放器所需的任何文件都突然包含在 Kinds.Video 映射中。这是映射中 .srt 文件的来源。

作为负责制定此类映射决策的人之一,我想借此机会向我的混乱道歉,并保证我不会像你看到这个设计所想的那样脑残。大概

于 2018-10-03T22:21:43.403 回答