编程语言
首页 > 编程语言> > 如何在c#中访问System.Video.FrameRate

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

作者:互联网

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

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

解决方法:

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

Windows API Code Pack可能是最简单的方法.要获取此属性,首先需要确定要使用的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接口处理.

标签:c,frame-rate
来源: https://codeday.me/bug/20190624/1283212.html