C# 获取上传后的视频持续时间

C# 获取上传后的视频持续时间,c#,asp.net,video,duration,C#,Asp.net,Video,Duration,最好的方式是什么 我有一个用户将上传视频的字段 单击“上载”按钮时,将上载视频。这工作做得很好 我需要视频从物理路径的持续时间,我尝试: using WMPLib; WindowsMediaPlayer wmp = new WindowsMediaPlayerClass(); IWMPMedia mediaInfo = wmp.newMedia(Server.MapPath("~/Uploads/test.mp4")); double duration = mediaInfo.duration;

最好的方式是什么

我有一个用户将上传视频的字段

单击“上载”按钮时,将上载视频。这工作做得很好

我需要视频从物理路径的持续时间,我尝试:

using WMPLib;
WindowsMediaPlayer wmp = new WindowsMediaPlayerClass();
IWMPMedia mediaInfo = wmp.newMedia(Server.MapPath("~/Uploads/test.mp4"));
double duration = mediaInfo.duration;
但它不起作用,我得到一个错误:

类型“WMPLib.WindowsMediaPlayerClass”没有定义构造函数,无法嵌入互操作类型“WMPLib.WindowsMediaPlayerClass”


如何捕获持续时间?

使用DirectShow.Net包装库,您可以使用DirectShow API
MediaDet
对象。方法
get_StreamLength
是以秒为单位获取视频长度的方法,可以使用确定性算法将其转换为分钟/小时。要使用此API,请确保操作系统上已安装MPEG-4依赖项

或者,您可以选择library从视频文件中获取信息


请参阅使用DirectShow.NET包装器库的实现:

我们以多种方式获得视频持续时间

方法1:Shell32API

方法2:WMPLib(windows Media Player库)

方法3:FFMpeg包装器

检查以下链接

方法1和方法2链接

方法3参考链接

在这个用于获取视频属性和持续时间的方法中,我之前检查过这三个属性。它工作正常,文件属性中的一些自定义属性在前两个方法中没有显示


方法3在共享主机中不起作用。专用服务器需要它。

您可以使用此nuget软件包:

Install-Package Xabe.FFMpeg
我正在尝试制作易于使用的跨平台FFmpeg包装器

有关这方面的更多信息,请访问

有关获取视频文件持续时间的详细信息,请访问:

您的代码看起来不错,但如果您可以检查媒体信息的格式,如:

using WMPLib; // this file is called Interop.WMPLib.dll
WindowsMediaPlayerClass wmp = new WindowsMediaPlayerClass();
string FilePath = "yourFilePath";
IWMPMedia mediaInfo = wmp.newMedia(FilePath);

// write duration
Console.WriteLine("Duration = " + mediaInfo.duration);

// write named attributes
for (int i=0; i < mediaInfo.attributeCount; i++) 
{
    Console.WriteLine(mediaInfo.getAttributeName(i) + " = " +  mediaInfo.getItemInfo(mediaInfo.getAttributeName(i)) );
}
使用WMPLib;//此文件称为Interop.WMPLib.dll
WindowsMediaPlayerClass wmp=新WindowsMediaPlayerClass();
string FilePath=“yourFilePath”;
IWMPMedia mediaInfo=wmp.newMedia(文件路径);
//写入持续时间
Console.WriteLine(“Duration=“+mediaInfo.Duration”);
//写入命名属性
for(int i=0;i
以下代码片段可能会对你们有所帮助:

using WMPLib;
// ...your code here...

var player = new WindowsMediaPlayer();
var clip = player.newMedia(VideoFilePath);
Console.WriteLine(TimeSpan.FromSeconds(clip.duration));
不要忘记添加
wmp.dll的引用,它将
存在于
System32
文件夹中


解决方案的引用可能重复。我尝试了它们,但它们对我没有帮助:(@irshadjm您是否尝试添加显式嵌入的
WindowsMediaPlayer
,方法是转到该
WMPLib
的属性并设置
Embedded=True
,您将不得不询问设计用于显示/处理视频的代码以了解该细节。文件长度永远不会是一个指示器。而且可能会有太多备用跟踪对于视频/音频,它甚至可能不是一个特定剪辑的常数。我认为通常只接受“任何类型的视频”,然后转换为默认格式服务器端。在这样做的同时,您可以将长度计算为副作用。将其设置为一种形式也有助于检测重复项(理想情况下使用一些校验和)。我尝试了FFMpeg项目,代码看起来不错,但无法编译,如果您有时间,能否提供GitHub指南使其正常工作?此项目采用.NET标准2.0。可能这就是问题所在。根据文档,.NET标准在.NET Framework 4.6.1以上版本中受支持()但并不是每次都能解决它。我会设法解决这个问题。@Jeremythonpson如果可以的话,请在github上发布编译错误的问题。@TomaszŻmuda
VideoInfo
正在被淘汰,并被
MediaInfo
取代。Get()不是一个函数MediaInfo@Freerey感谢您的编辑。公共API不久前已更改
using WMPLib;
// ...your code here...

var player = new WindowsMediaPlayer();
var clip = player.newMedia(VideoFilePath);
Console.WriteLine(TimeSpan.FromSeconds(clip.duration));