C# 如何查找上传的mp4或f4v视频的持续时间?

C# 如何查找上传的mp4或f4v视频的持续时间?,c#,asp.net,video,duration,directshow.net,C#,Asp.net,Video,Duration,Directshow.net,我已经通过安装k-lite mega codec pack尝试使用了directshowlib-2005。它找不到mp4文件或f4v文件的持续时间(avi、wmv和flv没有问题)。我使用directshowlib-2005的imediseek界面来查找持续时间。但是对于mp4和f4v,GetDuration方法返回零 我知道这是一个编解码器的问题,但我不知道该安装哪个编解码器来获得mp4以及f4v文件的持续时间 我使用的代码如下所示: static public bool GetVideoLe

我已经通过安装k-lite mega codec pack尝试使用了directshowlib-2005。它找不到mp4文件或f4v文件的持续时间(avi、wmv和flv没有问题)。我使用directshowlib-2005的imediseek界面来查找持续时间。但是对于mp4和f4v,GetDuration方法返回零

我知道这是一个编解码器的问题,但我不知道该安装哪个编解码器来获得mp4以及f4v文件的持续时间

我使用的代码如下所示:

static public bool GetVideoLength(string fileName, out long length)
    {
        DirectShowLib.FilterGraph graphFilter = new DirectShowLib.FilterGraph();
        DirectShowLib.IGraphBuilder graphBuilder;
        //DirectShowLib.IMediaPosition mediaPos=null;
        DirectShowLib.IMediaSeeking mediaPos;
        length = 4294967296;

        try
        {
            graphBuilder = (DirectShowLib.IGraphBuilder)graphFilter;
            graphBuilder.RenderFile(fileName, null);
            //mediaPos = (DirectShowLib.IMediaPosition)graphBuilder;
            mediaPos = (DirectShowLib.IMediaSeeking)graphBuilder;                
           // mediaPos.get_Duration(out length);
            mediaPos.GetDuration(out length);

            return true;
        }
        catch
        {
            return false;
        }
        finally
        {               
            mediaPos = null;
            graphBuilder = null;
            graphFilter = null;               

        }
    }

有谁能帮我告诉我应该安装哪种编解码器来查找上面提到的持续时间吗

我只想用。它还有一个CLI,因此您可以从代码中调用它并获取此信息。它几乎可以处理所有类型的编解码器和容器。

对于我提出的一个稍微不同的问题,这个答案可能适合您:MP4文件可以包含各种编解码器。可能是H.264(很有可能),也可能是其他版本。您好,在搜索我的代码为何不适用于mp4时,我发现以下语句:“它是否在容器中并不重要,重要的是是否有解析器/读取器。没有用于读取原始H.264文件的stock DirectShow解析器,也没有我能想到的第三方解析器。此外,IMediseeking是否能够处理这样一个原始文件取决于实现。最后,大多数与H.264相关的过滤器都使用MPEG2Video或VideoInfo2,两者都不适用于MediaDet,因此您必须自己构建图表?