Создание заголовка RTCP
Частота, с которой программное обеспечение RTCP генерирует отчеты получателя, зависит от числа участников обмена данными (по мере увеличения числа участников частота снижается). Кроме того, стандарт определяет исходное значение частоты, которое используется до того, как программным обеспечением будет получена информация о других участниках обмена данными. Процедура rtcpinterval вычисляет продолжительность паузы до следующего отчета; код, приведенный в файле rtcpinterval.с, взят непосредственно из стандарта RTCP. купить авто в беларуси, купим авто в беларуси, выкупить авто

Перед выходом из сеанса RTP участник этого сеанса должен передать сообщение о завершении обмена данными по протоколу RTCP. Код формирования и отправки этого сообщения приведен в файле rtcpsendbye.c.
Объем исходного кода программы, созданной в рамках интегрированной версии
В предыдущей главе были описаны размеры библиотеки RTP общего назначения. Как показано в табл. 29.1, в отличие от этой библиотеки, которая включает свыше 6 тыс. строк исходного кода, интегрированная версия, рассматриваемая в настоящей главе, состоит только из 700 строк, которые распределяются по компонентам; в этой версии достигнуто существенное снижение объема кода за счет того, что вместо программных средств общего назначения применяются специализированные программные средства.
Как показано в этой таблице, интегрированная версия программного обеспечения состоит из 841 строки исходного кода. В их число входят 140 строк главной процедуры и той, что обеспечивает воспроизведение аудиоинформации. Таким образом, все это приложение, включая интегрированную версию программного обеспечения RTP, составляет по объему менее 14% по сравнению с библиотекой, описанной в главе 28. Без учета объема кода главной процедуры, этот исходный код составляет менее 12% по сравнению с библиотекой.
В настоящей главе рассмотрена интегрированная версия приложения для обработки потоковой аудиоинформации, которая обеспечивает прием и воспроизведение аудиоинформации, передаваемой по протоколу RTP. Как и в библиотеке общего назначения, описанной в предыдущей главе, в программном обеспечении, рассматриваемом в настоящей главе, применяется несколько потоков выполнения. Основной поток принимает и воспроизводит аудиоинформацию, а три других потока обрабатывают входящие пакеты RTP, входящие пакеты RTCP и исходящие пакеты RTCP. В отличие от библиотеки, возможности рассматриваемой программы ограничены: она позволяет принимать только один поток аудиоинформации в одном сеансе с использованием одной схемы кодирования, но результирующая программа имеет намного меньший объем по сравнению с библиотекой.
Материал для дальнейшего изучения
Общие сведения о форматах пакета RTP и RTCP приведены в документе [143]; в нем также определены многие алгоритмы, которые применяются в рассматриваемом примере кода. В частности, в этом стандарте приведена подробная спецификация методов выбора начального значения порядкового номера RTP и вычисления задержки при формировании отчетов получателя. Часть кода, прbведенного в настоящей главе, взята непосредственно из указанного документа. Этот код немного переформатирован и в нем удалена часть комментариев, чтобы он соответствовал стилю, применяемому в данной книге, но во всем остальном он остался неизменным.
С информацией о звуковом устройстве Linux (/dev/audio) и звуковых кодировках, предусмотренных для конкретного компьютера, можно ознакомиться в оперативной документации. И наконец, ниже указан Web-узел, на котором приведены данные о комплекте инструментальных средств обработки аудиоинформации RTP Audio Tool:
http://www-mice.cs.ucl.ac.uk/multimedia/projects/rat/index.html
- В этом программном обеспечении предполагается по умолчанию, что звуковое устройство Linux было инициализировано для воспроизведения аудиоинформации с импульсно-кодовой модуляцией (в кодировке по закону "мю"). Доработайте рассматриваемый пример прикладной программы таким образом, чтобы в нем инициализация звукового устройства выполнялась явно.
- Для предотвращения возникновения пропусков во время воспроизведения в рассматриваемом примере кода предусмотрена заблаговременная активизация приостановленного потока. Проведите эксперименты при разных нагрузках операционной системы Linux и различных размерах буфера устройства, чтобы определить, какая взаимосвязь существует между нагрузкой, размером буфера и моментом заблаговременной активизации потока для предотвращения пропусков.
- Потоки выполнения применяются для достижения следующих двух целей: уменьшение сложности кода и повышение производительности за счет распараллеливания работы. Покажите, в какой степени достигается каждая из этих двух целей в рассматриваемом примере приложения.
- Выполните профилировку приложения, рассматриваемого в данном примере, измеряя продолжительность выполнения отдельных процедур. Зависит ли быстродействие данного приложения в основном от работы процессора или системы ввода/вывода? Какие операции требуют расхода наибольшего количества процессорного времени?
- В рассматриваемом примере программы предусмотрена возможность приема пакетов RTP, передаваемых по методу групповой рассылки. Если соответствующий компонент программы будет заменен компонентом, обеспечивающим только прием данных, передаваемых по принципу индивидуальной передачи, приведет ли это к уменьшению объема исходного кода?
- Доработайте рассматриваемый пример программы таким образом, чтобы в нем для доставки сообщений RTP применялся протокол TCP, а не UDP. В чем состоит основная сложность такой доработки? В чем состоит основное преимущество такой версии программы?
- Разработайте приложение, которое извлекает данные из звукового устройства Linux и передает их с использованием протокола RTP. Для реализации какой функции, передачи или приема, требуется больший объем кода? Почему?