DirectShow GetDuration дает неправильное значение длительности - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь получить продолжительность мультимедийного файла с DirectShow. Я использую следующий код (C #):

var seekingParser = filter as IMediaSeeking;
if (seekingParser != null)
{
   long duration;
   if (seekingParser.SetTimeFormat(TimeFormat.MediaTime) == 0
       && seekingParser.GetDuration(out duration) == 0)
       track.Duration = duration / 10000000f;
}

чтобы получить длительность медиа-файла в секундах. Тем не менее, когда я пытаюсь открыть 3-4 минуты MP3-файлов, трек. Длительность становится 11-12 минут. Я пробовал несколько файлов, и эффект всегда одинаков. В чем может быть причина?

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

Обычно вы используете IMediaPosition интерфейс (вместо IMediaSeeking) со стороны приложения. Продолжительность сообщается всегда в секундах. Однако это вряд ли что-то изменит, и что может повлиять на продолжительность чтения из тегов ID3, используя Windows Media API, Поддержка тегов ID3 ​​.

Существуют ли более надежные способы получения точной продолжительности мультимедийного файла с помощью DirectShow API?

Windows Media Player воспроизводит файлы MP3 через Media Foundation, не-DirectShow API, поэтому у вас нет возможности ожидать или сделать точно то же самое с DirectShow.

2 голосов
/ 01 марта 2012

С документация :

В зависимости от исходного формата продолжительность может быть не точной.Например, если источник содержит поток с переменной скоростью передачи битов (VBR), метод может вернуть приблизительную длительность.

Вы случайно используете поток VBR?

0 голосов
/ 01 марта 2012

Вы можете попробовать то же самое на чистой установке Windows.Возможно, у вас установлен кодек (пакет) с ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...