Назначение API-интерфейса
Какие средства должен предоставлять прикладной интерфейс программам, которые обрабатывают данные в реальном времени? Здесь уже рассматривалась разница между кодировками выборок и кадров. Однако возникает еще один важный вопрос: как должно быть представлено время? Для этого может применяться один из двух вариантов. увидел иконка деньги на сайте
- Явное управление временем. Интерфейс всегда предоставляет вместе с данными отметку времени. В приложении принимается решение о том, когда должны быть воспроизведены данные (т.е. в приложении устанавливается соответствие между отметкой времени, сформированной отправителем, и показаниями часов на локальном компьютере).
- Неявное управление временем. После получения от приложения информации о том, что к нему должен поступить определенный поток, программное обеспечение передачи данных в реальном времени устанавливает соответствие между показаниями часов локального компьютера и показаниями часов источника мультимедийного потока. При каждой попытке приложения прочитать дополнительный объем данных программное обеспечение передачи в реальном времени определяет соответствие между текущими показаниями часов локального компьютера и показаниями часов источника мультимедийных данных и возвращает данные, начиная с требуемой точки потока.
Основное преимущество применения явного управления временем связано с тем, что приложение сохраняет полный контроль над синхронизацией показаний часов и воспроизведением. Если в работе приложения возникает небольшая пауза, а затем снова начинается чтение, то приложение получает все данные, поступившие с момента выполнения последней операции чтения. Поэтому операция пропуска части входного потока может оказаться неэффективной, поскольку для ее выполнения приложение должно читать и отбрасывать данные.
Основное преимущество применения неявного управления временем связано с упрощением программирования; в приложении достаточно открыть поток, прочитать данные и воспроизвести эти данные. В приложении нет необходимости вычислять разницу во времени, поскольку основополагающая система всегда возвращает данные, которые соответствуют текущему времени. Если работа приложения была приостановлена на несколько секунд, а затем в нем было выполнено чтение дополнительного объема данных, то базовая система продвигает вперед указатель в буфере, пропуская данные, соответствующее тому времени, которое было потеряно во время паузы.
Один из основных недостатков неявного управления временем (отсутствие возможности осуществлять в приложении абсолютный контроль над передачей данных) становится очевидным при возникновении ошибок или нестандартных ситуаций. Например, предположим, что в приложении, основанном на применении кодировки выбора, была предпринята попытка чтения до поступления данных, соответствующих текущему моменту времени. В программном обеспечении передачи данных в реальном времени предусмотрена возможность заблокировать приложение до поступления данных или возвратить сообщение об ошибке. В качестве другого примера предположим, что приложение, основанное на использовании кодировки кадров, требует выполнить чтение данных, относящихся к определенному моменту времени Т9 и что соответствующие данные находятся в середине кадра. Должен ли интерфейс заблокировать приложение до того момента, когда появится возможность предоставить весь следующий кадр, или просто возвратить сообщение об ошибке и дать возможность приложению повторить попытку чтения позже? Безусловно, что для одних приложений желательно предусмотреть возможность блокировки, тогда как для других целесообразнее предусмотреть получение сообщения об ошибке.