|
VoIP изнутри Салиев Александр aka Fagot Xakep, номер #053, стр. 053-074-4 Полезная информация (к примеру, звук) разбивается на сэмплы должной длины, пакуется оговоренным кодеком, и вкладывается в RTP-пакеты, которые маркируются временными метками, набором служебной информации и отправляются другой стороне. Принимающая сторона не воспроизводит пакеты сразу по получении, а собирает их в так называемый Jitter-буфер, хранящий, к примеру, 10 пакетов. После заполнения буфера пакеты выстраиваются в исходный порядок с помощью своих временных меток, недостающие пакеты интерполируются своими сохранившимися соседями, и только после этого происходит их декодирование и воспроизведение. Также присутствуют механизмы обнаружения промежутков тишины (silence detection) и генерации комфортного шума (comfort noise generation, CNG). Если на всем промежутке сэмпла уровень сигнала ниже определенного значения, то данный сэмпл считается "содержащим тишину", и в передающийся пакет не вкладывается, а вкладывается туда "маркер тишины", размер которого намного меньше размера закодированного сэмпла. Когда шлюз получает такой пакет, он не пытается его декодировать, а генерирует тихий шум нужной длительности, потому как считается, что мертвая тишина в трубке давит на уши и нервирует абонента. Время от времени противоположной стороне отправляется контрольный RTCP-пакет, содержащий статистику приема RTP-пакетов за заданный период времени. Это позволяет удостовериться в том, что противоположная сторона получает достаточно полезной информации для того, чтобы ее воспроизведение и продолжение сессии имело смысл. Также это позволяет собрать информацию для механизма оценки качества передачи (Quality of servise, QoS). Кодим - декодим Нельзя обойти вниманием такую важную тему, как кодеки. Все современные кодеки, применяемые в IP-телефонии, имеют общего предка - кодек G.711. Этот кодек был поистине монстроидальным, требовал полосы пропускания 64kbps, но, с другой стороны, имел самые низкие требования к ресурсам DSP и самое высокое качество выходящего сигнала. Пришел он в IP-телефонию из коммутируемых ATM-каналов, где применялся повсеместно. Но время шло, и мощность железа стремительно росла, чего нельзя было сказать о пропускной способности сетей. Это привело к тому, что кодеки стали переформировывать свои алгоритмы в сторону большей жадности к вычислительным ресурсам, взамен понижая свои требования к ширине передающего канала. Тут применялись и MP3-подобные алгоритмы, и методы фонемной компрессии, и частотные ограничения полезной части сигнала, и многое другое. Приблизительно развитие кодеков в этом направлении выглядело так: G.711 (алгоритм - PCM, полоса пропускания - 64kbps, требования к DSP - стремятся к нулю), G.726 (алгоритм - ADPCM, полоса пропускания - 32kbps, требования к DSP - 6 MIPS), G.729 (алгоритм - фонемный вокодер, полоса пропускания - 8kbps, требования к DSP - 21.5 MIPS), G.723 (гибридный алгоритм - фонемный вокодер + PCM + ADPCM, полоса пропускания - 5.3-6.3kbps, требования к DSP - 16.5 MIPS). Наиболее популярным по соотношению качество/производительность/ширина канала по праву считается кодек G.729. Существуют и другие, но они не так широко распространены. Стоит отметить тот факт, что обрезание высоких частот сделало невозможным работу факсов и прочего модуляторно-демодуляторного оборудования в голосовом режиме. Для разрешения этой ситуации применяются схемы, детектирующие начало работы подобного оборудования, и специальные модемно-факсовые кодеки. Логические каналы в этом случае работают в DATAMODE, а не в VOICE. Наиболее распространенным решением для передачи факсов по IP на данный момент является схема T.38. |