2010-02-05 4 views

ответ

2

да, вы можете сделать это с помощью DirectShow. Существует множество способов сделать это. Один из способов - запросить интерфейс IMediaSeeking на объекте графа, а затем вызвать метод GetDuration на этом интерфейсе.

GetDuration возвращает 64-битное целочисленное значение для того, сколько времени потребуется, чтобы воспроизвести файл.

Вам нужно будет вызвать метод GetTimeFormat, чтобы узнать, в каких единицах находится продолжительность. Наиболее вероятным значением по умолчанию является TIME_FORMAT_MEDIA_TIME, которое составляет 10-е число микросекунд.

В этом случае вы разделите продолжительность на 10 * 1000 * 1000, чтобы получить секунды.

Вы также можете позвонить по телефону SetTimeFormat, прежде чем звонить GetDuration, если хотите принудительно отключить устройства.

+0

Я попробую. Спасибо. –

+0

Я пробовал это, и сначала это не сработало. Если я сначала назвал graph.RenderFile, а затем вызвал GetDuraction, он сработал. Спасибо за помощь! –

+0

@Judah: Да, граф должен знать, какой файл, прежде чем он сможет рассказать вам, как долго. –

1

Вы также можете использовать get_Duration() из интерфейса IMediaPosition.

Это возвращает двойное значение с продолжительностью видео в секундах.

Double Lenght; 

    m_FilterGraph = new FilterGraph() 

//Configure the FilterGraph() 

    m_mediaPosition = m_FilterGraph as IMediaPosition; 
    m_mediaPosition.get_Duration(out Length); 
Смежные вопросы