Поделиться через


Таймеры событий мультимедиа

Многие приложения зависят от связи времени между событиями мультимедиа (например, полученными цифрами DTMF), чтобы определить характер запрошенной операции. Например, в приложении голосовой почты две последовательные цифры DTMF "1" могут означать "резервное копирование двух сегментов" или "воспроизведение с начала сообщения" в зависимости от того, сколько времени прошло между двумя цифрами. В клиентской или серверной среде, если обнаружение DTMF выполняется на отдельном процессоре, отличном от процессора, на котором выполняется приложение, задержка в локальной сети делает весьма вероятным, что отношение времени между событиями мультимедиа будет искажено, в результате чего эти различия на основе времени могут быть потеряны или станут ненадежными.

Чтобы устранить эту проблему, можно установить метки времени для нескольких сообщений TAPI. Так как важно относительное время между этими событиями, "время часов" события не имеет значения, а используется время в секунду, эти метки времени используют миллисекундное разрешение "время с момента запуска Windows", возвращаемое функцией GetTickCount . Приложения должны знать, что это число тактов на сервере (или компьютере, где поставщик услуг напрямую управляет оборудованием), и это не обязательно тот же компьютер, на котором выполняется приложение; Таким образом, метки времени в этих сообщениях TAPI можно сравнивать только друг с другом, а не со значением, возвращенным GetTickCount на процессоре, на котором выполняется приложение.

К сообщениям TAPI, которые могут быть установлены метки времени, относятся следующие: LINE_GATHERDIGITS, LINE_GENERATE, LINE_MONITORDIGITS, LINE_MONITORMEDIA и LINE_MONITORTONE. Счетчик тактов вставляется в dwParam3 этих сообщений. Если метка времени не поддерживается поставщиком услуг (что указано поставщиком услуг, задающим dwParam3 в этих сообщениях значение 0), то сама функция TAPI вставляет счетчик тактов в dwParam3 всех этих сообщений (это может быть несколько искажено, но меньше, чем если бы приложение выполнило то же самое после того, как сообщения пересекли схему межпроцессного взаимодействия).