Как узнать длительность загруженного видео в формате mp4 или f4v? - PullRequest
2 голосов
/ 18 октября 2010

Я пытался использовать directshowlib-2005 , установив пакет мега-кодеков k-lite . не может найти продолжительность файла mp4 или f4v (avi, wmv и flv не имеет проблем) . Я использую ImediaSeeking интерфейс directshowlib-2005, чтобы найти продолжительность. Но в случае 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;               

        }
    }

Может ли кто-нибудь помочь мне, указав точный кодек, который должен быть установлен для определения продолжительности, как указано выше?

1 Ответ

1 голос
/ 12 ноября 2010

Я бы просто использовал MediaInfo . Для этого также есть CLI, так что вы можете вызвать его из кода и получить эту информацию Он в значительной степени обрабатывает все виды кодеков и контейнеров.

...