繁体   English   中英

如何在c#中访问System.Video.FrameRate

[英]How to access to System.Video.FrameRate in c#

Windows Shell的属性系统定义了一个名为System.Video.FrameRate的标准属性( 此处记录 ),该属性在大多数视频文件中都可用。 周围的文档仅涵盖用于获取这些值的非托管API。

如何在C#中访问此Windows属性?

要访问shell属性(这就是它 - 这些'Windows'属性只是Windows预定义的shell属性,与特定于应用程序的属性不同),有两种常用方法:interop或Windows API代码包。

Windows API代码包可能是最简单的方法。 要获取此属性,首先需要确定要使用的shell对象。 (属性总是在某些特定对象上找到。所以这个属性不是告诉你系统帧速率的全局值 - 它通常存在于视频文件中,它告诉你该文件的帧速率。)此代码获取shell我碰巧在我的系统上拥有的视频对象,检索属性并显示其值。

ShellObject obj = ShellObject.FromParsingName(@"D:\Video\IanAndDeborahTree.mp4");
ShellProperty<uint?> rateProp = obj.Properties.GetProperty<uint?>("System.Video.FrameRate");
Debug.WriteLine("{0:G3}FPS", rateProp.Value/1000.0);

请注意,属性的值是可以为空的unsigned int。 如果你要求int类型的属性,它将失败,表明没有这样的属性可用。 所以你必须去uint? 您还应该检查该物业是否真的存在 - 我不打扰这里,因为我知道它会。

另一种方法是使用interop直接与shell API对话(这是API代码包为您做的事情)。 虽然这是很多工作 - 为了实现这三条线所做的事情,你必须跳过的箍数是巨大的,因为你最终需要以.NET互操作的形式定义一个令人惊讶的大量COM接口处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM