2010-10-18 6 views
2

Я пытался использовать directshowlib-2005 путем установки k-lite мегакодек pack. Он не может найти продолжительность файла mp4 или файла f4v (avi, wmv и flv не представляет проблемы). Я использую ImediaSeeking интерфейс directshowlib-2005, чтобы найти продолжительность. Но в случае mp4 и f4v метод GetDuration возвращает ноль.Как найти длительность загруженного видео mp4 или f4v?

Я знаю, что это проблема с кодеком, но я не знаю, какой кодек должен быть установлен для получения 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;    

     } 
    } 

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

+0

Этот ответ на несколько иной вопрос, который я задал, вероятно, сработает для вас: http://stackoverflow.com/questions/3936816/querying-an-audio-video-file-for-information/3938722#3938722 – TRiG

+0

И MP4 файлы могут содержать различные кодеки. Может быть H.264 (вполне вероятно), или может быть что-то еще. – TRiG

+0

Привет, Во время поиска, чтобы узнать, почему мой код не работает для mp4, я нашел следующее заявление: «Неважно, находится ли он в контейнере или нет, он имеет значение только для того, есть ли у вас анализатор/считыватель для него Там не является парцером DirectShow для чтения необработанных файлов H.264 и нет стороннего, о котором я могу думать. Кроме того, будет ли IMediaSeeking работать с таким необработанным файлом, зависит от реализации. Последнее, большинство H. 264-фильтры используют MPEG2Video или VideoInfo2, и ни один из них не работает с MediaDet, поэтому вам нужно будет построить график самостоятельно ». вы можете мне помочь? – Harun

ответ

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^