Протоколы Internet


Транспортный протокол реального времени RTCP - часть 22


rsp = (rtcp_sdes_item_t *)&rsp->data[len];

}

/* завершить конечным маркером и заполнителем на очередной 4-октетной границе */

len = ((char *) rsp) - b;

pad = 4 - (len & 0x3);

b = (char *) rsp;

while (pad--) *b++ = RTCP_SDES_END;

return b;

}

Разбор пакетов RTCP SDES

Эта функция осуществляет разбор пакета SDES, вызывая функции find_member() для поиска указателя на информацию для члена сессии с идентификатором SSRC и member_sdes() для запоминания новой информации SDES для этого участника. Этой функции необходим указатель на заголовок пакета RTCP.

void rtp_read_sdes(rtcp_t *r)

{

int count = r->common.count;

rtcp_sdes_t *sd = &r->r.sdes;

rtcp_sdes_item_t *rsp, *rspn;

rtcp_sdes_item_t *end = (rtcp_sdes_item_t *)

((u_int32 *)r + r->common.length + 1);

source *s;

while (--count >= 0) {

rsp = &sd->item[0];

if (rsp >= end) break;

s = find_member(sd->src);

for (; rsp->type; rsp = rspn ) {

rspn = (rtcp_sdes_item_t *)((char*)rsp+rsp->length+2);

if (rspn >= end) {

rsp = rspn;

break;

}

member_sdes(s, rsp->type, rsp->data, rsp->length);

}

sd = (rtcp_sdes_t *)

((u_int32 *)sd + (((char *)rsp - (char *)sd) >> 2)+1);

}

if (count >= 0) {

/* некорректный формат пакета */

}

}

Вычисление периода рассылки RTCP

Следующая функция в качестве результата выдает время между посылками RTCP-пакетов, измеренное в секундах. Она должна вызываться после посылки одного составного RTCP-пакета для вычисления времени до посылки следующего пакета. Эта функция должна также вызываться для вычисления времени посылки первого RTCP-пакета при запуске. Это исключает любые кластеры RTCP-пакетов, если приложение запущено в нескольких узлах одновременно, например, в результате объявления об открытии сессии.

Параметры имеют следующий смысл:

rtcp_bw: Предельная полоса RTCP, т.е., полная пропускная способность, которая будет использоваться для RTCP-пакетов всеми участниками сессии, выраженная в октетах в секунду. Она должна быть порядка 5% от "полосы сессии", этот параметр задается при конфигурировании приложения.




Начало  Назад  Вперед