Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Multimediynye_seti.doc
Скачиваний:
14
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

7.5. Получение пакетов

RTP сессия включает в себя как потоки данных, так и потоки управления, работающие с назначенными портами (обычно четным для потока данных и нечетным для потока управления). Это означает, что принимающее потоки приложение должно открывать два сокета (сокет – объект, являющийся конечным элементом соединения, обеспечивающего взаимодействие между процессами транспортного уровня сети), один – для данных, второй – для управления. Так как RTP работает в стеке протоколов UDP/IP, он использует стандартные сокеты SOCK_DGRAM.

После создания сокетов приложение подготавливается к получению пакетов по сети и хранению их для последующей обработки. Многие приложения реализуют это в виде цикла, повторяющегося при получении очередных пакетов.

Пакеты данных и управления проверяются на корректность, как описывалось в предыдущих разделах. Интервал повторения цикла получения пакетов выбирается по интервалу между фреймами.

Для организации процесса получения пакетов может использоваться и событийный подход: пакеты в этом случае обрабатываются по мере их поступления. Обычно такой подход применяется при условии работы в реальном времени.

7.5.1. Получение пакетов данных

Первой стадией проигрывания данных мультимедиа по сети является получение пакетов и их буферизация для дальнейшей обработки. Так как сеть часто изменяет интервал времени между пакетами, как показано на рис. 7.5, то несколько пакетов могут появиться в короткий интервал времени или могут возникнуть большие паузы между поступлением пакетов. Получатель не знает заранее, когда прибудут очередные пакеты, поэтому он должен быть готов к получению нескольких пакетов сразу, причем в любом порядке.

После получения пакетов они проверяются на корректность и добавляются в очередь для дальнейшей обработки в порядке возрастания их меток времени. Эти шаги разрывают связь между временем прибытия пакетов и временем их обработки и проигрывания для пользователя. На рис. 7.6 показано разделение между получением пакетов и программами проигрывания, которые имеют доступ только к входным очередям.

Рис. 7.5. Нарушение интервала времени между пакетами при их транспортировке по сети

Рис. 6.6. Отделение процесса получения пакетов от их проигрывания

Важно запоминать точное время прибытия пакетов M, чтобы иметь возможность рассчитать соответствующие статистические характеристики. Неточное измерение может привести к появлению задержек в передаче пакетов. Время прибытия измеряется по реальному времени получателя T и преобразуется в потоковое время R:

M=T×R+смещение

Здесь смещение используется для перехода от относительного времени к потоковому времени, корректируя разницу между ними.

Как отмечалось ранее, процесс приемки пакетов в приложении может чередоваться с их обработкой, или эти действия могут быть разделены по разным ветвям логики работы приложения. В первом случае одна ветвь осуществляет и прием пакетов, и их обработку перед проигрыванием. За один цикл работы все пришедшие пакеты считываются из сокета и вставляются в правильном порядке в очередь проигрывания. Во втором случае одна ветвь приложения занимается приемкой пакетов и формированием из них очереди. Другие ветви занимаются декодированием данных и подготовкой их к проигрыванию.

Независимо от выбранного варианта приложение не может принимать и обрабатывать пакеты непрерывно. Входные очереди сглаживают флуктуации для процесса проигрывания в приложении, но что делать с задержками в поступлении пакетов? К счастью, большинство операционных систем общего назначения управляют приемкой пакетов UDP/IP на основе управления прерываниями и могут буферизовать пакеты на уровне сокета, даже если в это время принимающее приложение занято. Принятый по умолчанию буфер сокета подходит для большинства приложений, но приложения, работающие с высокоскоростными сетями, могут увеличить размер буфера до необходимого. Правда, это может привести к увеличению задержек в получении пакетов, но в приложении можно соответственно увеличить значение задержки проигрывания, что компенсирует данный отрицательный эффект.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]