Такой вопрос возник: при проигрывании звука в DirectShow требуется получать точное время того, что сейчас звучит. Рекомендуемый способ это GetCurrentPosition у IMediaSeeking полученном от IGraphBuilder. Так вот... этот метод выдаёт время с некоторым постоянным временным интервалом (опережение) отличным от того, что дожно быть и после того как в программе выполняется SetPositions у IMediaSeeking он начинает выдавать время уже с другим постоянным временным интервалом (запаздывание). Возникло подозрение, что время, которое он выдаёт — это время в считываемом файле (который иногда считывается заранее, иногда нет), а не в выходном потоке. Вопрос: как узнать "правильное" время? Обращу внимание, что эти задержки порядка 300-500 мсек, а потому обычно на них забивают. Но что делать, если нужно именно точно...
Здравствуйте, LtSolo, Вы писали:
LS> Добрый день.
LS> Такой вопрос возник: при проигрывании звука в DirectShow требуется получать точное время того, что сейчас звучит. Рекомендуемый способ это GetCurrentPosition у IMediaSeeking полученном от IGraphBuilder. Так вот... этот метод выдаёт время с некоторым постоянным временным интервалом (опережение) отличным от того, что дожно быть и после того как в программе выполняется SetPositions у IMediaSeeking он начинает выдавать время уже с другим постоянным временным интервалом (запаздывание). Возникло подозрение, что время, которое он выдаёт — это время в считываемом файле (который иногда считывается заранее, иногда нет), а не в выходном потоке. Вопрос: как узнать "правильное" время? Обращу внимание, что эти задержки порядка 300-500 мсек, а потому обычно на них забивают. Но что делать, если нужно именно точно...
Быть может, если взять IMediaSeeking непосредственно с аудио рендерера, то он будет показывать более точное время?
Re[2]: Получение позиции при проигрывании звука...
Так вот rtTime завсегда равен нулю. :no:
...в обычном виндовом API (waveOutOpen, waveOutPrepareHeader, waveOutWrite) я знал какая порция звука только что закончилась и делал интерполяцию зная nAvgBytesPerSec. Здесь же такого метода нет или он хорошо упрятан.
Так что вопрос открыт...
Re[3]: Получение позиции при проигрывании звука...
От:
Аноним
Дата:
14.11.04 14:03
Оценка:
Чувак смотри Пост "Как при Rate > 1 получитть текущую позицию"
потом читай про IReferenceClock и про метод Advise так можно получать
время с точностью 100 нанасекунд ...
или более подробно накатай письмо по твоей проблеме на bb@netsib.com