Сеансы, потоки, порты протокола и демультиплексирование
Прежде чем перейти к изучению структуры программного обеспечения протокола передачи данных в реальном времени, необходимо рассмотреть несколько важных понятий. Вначале необходимо определить понятие группы участников обмена данными. Мы определяем сеанс RTP как состоящий из всего трафика, возможно исходящего от многих отправителей, который передается по месту назначения, обозначенному следующей парой:
(IP__addressr protocol__port_number)
Здесь IP-address обозначает IP-адрес, a protocol_port__number — номер порта протокола. Отметим, что если параметр IP_address представляет собой индивидуальный адрес, то в сеансе RTP принимает участие только один получатель, а если параметр IP_address соответствует групповому адресу, то в сеансе принимает участие группа. Применение групп рассылки является особенно важным в связи с тем, что они позволяют осуществлять произвольный обмен данными между членами группы; если группы рассылки не используются, в сеансе может принимать участие только один получатель.
Следующее определение в основном касается последовательности пакетов, которые содержат взаимосвязанные данные. Мы определяем поток как последовательность пакетов RTP от одного источника синхронизации. Сеанс RTP может охватывать один или несколько независимых потоков RTP, которые передаются по одному и тому же адресу назначения, с указанием одного и того же порта протокола. Например, при проведении многосторонней аудиоконференции каждый участник передает всем другим независимый поток аудиоинформации.
Хотя большинство приложений предусматривает отправку каждым источником в определенном сеансе только одного потока, один источник может в случае необходимости отправлять сразу несколько потоков. Например, может потребоваться, чтобы один источник передавал одновременно данные нескольких типов (допустим, и аудио-, и видеоинформацию). Иным образом, может быть принято решение отправлять из некоторого источника один набор данных с использованием нескольких кодировок (допустим, передавать одну и ту же видеоинформацию и с высоким, и с низким разрешением).
Для обеспечения возможности связывать каждое сообщение с тем потоком, к которому оно относится, программное обеспечение компьютера-получателя должно демультиплексировать входящие сообщения RTP. Демультиплексирование происходит на двух уровнях. Первый уровень демультиплексирования (демультиплексирование в сеансе) выполняется на транспортном уровне. Приложение для приема данных RTP должно создать сокет UDP. В этом приложении, как и в обычном сервере, задается конкретный номер порта протокола. В аудиоприложении, ожидающем поступления одноадресного трафика, как и в обычном сервере, может использоваться IP-адрес INADDR_ANY. Но если аудиоинформация передается с применением групповой рассылки, сервер должен указать конкретный групповой IP-адрес. В любом случае этот адрес используется в программном обеспечении транспортного уровня для демультиплексирования на уровне сеанса. Это означает, что программное обеспечение UDP проверяет пару полей (IP_address protocol_ port_number) в каждом входящем пакете для определения того, какое приложение на компьютере должно получить пакет, передаваемый в данном сеансе.
Второй уровень демультиплексирования (демультиплексирование потока) происходит после передачи пакета в программное обеспечение RTP. В этом программном обеспечении используются идентификатор источника синхронизации и тип пакета для объединения очередного пакета с теми, что относятся к тому же потоку. Только после определения принадлежности пакета к тому или иному потоку можно использовать поля порядкового номера и отметки времени для установки его на соответствующее место в потоке и определения времени его воспроизведения.