【问题标题】:uwp app AdvancedQuerySyntax for video file types视频文件类型的 uwp 应用 AdvancedQuerySyntax
【发布时间】:2018-03-29 15:20:00
【问题描述】:

在我的 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";

【问题讨论】:

    标签: c# xaml uwp video-library advanced-query-tool


    【解决方案1】:

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

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

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

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

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

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

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

    作为负责制定地图决策的人之一,我想借此机会向我的烂摊子道歉,并保证我不会像你看到这个设计时想象的那样脑残。可能

    【讨论】:

    • 无需道歉,我相信你们的设计是有正当理由的。虽然你能告诉我如何排除 .srt 文件的代码,而且 .srt 只是我需要考虑的文件类型(除了视频文件),还是有任何其他扩展名也可能在这种情况下有效吗?
    • 文件扩展名到种类的完整映射存储在注册表中:Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\KindMap
    • 至于代码,您只需要更新这一行:string videoFilter = "System.Kind:=System.Kind#Video ext:<>.srt"; 看起来您可能已经找到它们(使用与语言环境无关的 kind 版本做得很好?),但完整的文档AQS 在这里:docs.microsoft.com/en-us/windows/desktop/search/…
    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2013-01-26
    • 2020-07-18
    相关资源
    最近更新 更多