—просите про Asterisk в Telegram - чате

ћерион Ќетворкс

ќдним из важных компонентов установлени€ соединени€ по протоколу SIP €вл€етс€ протокол Session Description Protocol, или сокращенно SDP.

ќ протоколе SDP впервые заговорили в 1998 году в рамках опубликованного RFC2327. —пуст€ 8 лет, в 2006 году протокол претерпел некоторые изменени€, которые были отображены в RFC4566.

ѕротокол SDP используетс€ дл€ установлени€ соединени€ и согласовани€ параметров передачи и приема аудио или видео потоков между оконечными устройствами. Ќаиболее важными параметрами обмена €вл€ютс€ IP Ц адреса, номера портов и кодеки. ƒавайте разбиратьс€?


ѕример SDP

ѕри установлении сессии SDP параметры передаютс€ в рамках SIP Ц запросов. ƒавайте взгл€нем на один из таких запросов. ¬ данном случае распарсим SIP INVITE, который прилетело на нашу IP Ц ј“— Asterisk с помощью утилиты sngrep:

INVITE sip:74996491913@192.168.x.xxx:5061;transport=UDP SIP/2.0
Via: SIP/2.0/UDP 80.xx.yy.zz:5060;branch=z9hG4bK-524287-1-MThkZjMzNzMyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;rport
Via: SIP/2.0/UDP 80.xx.yy.zz:5077;branch=z9hG4bK-XXXXXXXXXXXXXXXX;rport=5077
Max-Forwards: 69
Record-Route: 
Contact: 
To: 
From: ;tag=qdpxhe2avyyjcqfn.o
Call-ID: fb9909e8fYYYYYYYYYYYYYYYYYYYYYY
CSeq: 479 INVITE
Expires: 300
Allow: INVITE, ACK, BYE, CANCEL, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS, UPDATE
Content-Disposition: session
Content-Type: application/sdp
User-Agent: Sippy
P-Asserted-Identity: 
Remote-Party-ID: ;party=calling
h323-conf-id: 4133864240-4217115111-2706418710-XXXXXXXXX
Portasip-3264-action: offer 1
cisco-GUID: 4133864240-4217115111-2706418710-XXXXXXXXX
Content-Length: 278

v=0
o=Sippy 1011212504475793896 1 IN IP4 80.xx.yy.zz
s=-
c=IN IP4 80.xx.yy.zz
t=0 0
m=audio 57028 RTP/AVP 0 8 18 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=yes
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendrecv
ѕро Session Description Protocol

¬ приведенном примере можно увидеть, что основна€ часть SIP Ц сообщени€ отделена от SDP сегмента пустой строкой. ѕомимо прочего, поле Content-Type, что сообщение сопоставимо с SDP параметрами.


ѕро SDP пол€

 аждый из параметров SDP сообщени€ можно отнести к одной из следующих категорий:

  • »м€ сессии;
  • ¬рем€, в течении которого сесси€ активна;
  • ѕараметры медиа;
  • »нформаци€ о пропускной способности;
  •  онтактна€ информаци€;

ѕоговорим об основных параметрах. ќни всегда имеют следующее обозначение: <поле> = <значение>. ѕоле всегда обозначаетс€ 1 буквой.

ѕоле «начение ‘ормат
v= верси€ протокола v=0
o= инициатор сессии и соответствующие идентификаторы o=<им€_пользовател€> <идентификатор_сессии> <верси€> <тип_сети> <тип_адреса> <адрес>.
¬ нашем примере поле o=Sippy 1011212504475793896 1 IN IP4 80.xx.yy.zz (IN - тип сети, интернет, IP4 - тип адреса, IPv4;
s= им€ сессии в нашем примере прочерк ("-"), им€ сессии не указано;
c= информаци€ о подключении; —интаксис таков: c=<тип_сети> <тип_адреса> <адрес>. ¬ нашем примере IN IP4 80.xx.yy.zz. ѕараметры IN/IP4 объ€снены выше.
t= врем€ активности сессии —интаксис пол€ таков: t=<начальное_врем€> <конечное_врем€>. Ёто об€зательное поле, но важно отметить, что оно весьма субъективно, так как невозможно предсказать точное врем€ начала и окончани€. ¬ нашем примере t=0 0
m= тип передачи медиа данных, формат и адресаци€ m=<тип_медиа> <порт> <транспорт> <формат_передачи>. ƒавайте разберемс€ - у нас m=audio 57028 RTP/AVP 0 8 18 101, это означает передачу аудио (может быть значение video, или передача обоих типов), порт передачи обозначен как 57028, транспорт, указанный как RTP/AVP, означает передачу по протоколу RTP в рамках стандарта Audio and Video Conferences with Minimal Control, который описан в RFC3551. ѕосле, первый 0 означает протокол G.711 uLaw, 8 означает G.711 ALaw, 18 означает G.729. “о есть условно говор€, нам предложено предпочтение кодеков сначала G.711 uLaw, затем G.711 ALaw, и третьим приоритетом G.729. 101 означает поддержку динамического типа данных, например DTMF.
a= параметры сессии a=<параметр> или a=<параметр><значение>. SDP сесси€ может содержать несколько дополнительных атрибутов передачи. Ѕолее подробно мы рассмотрим далее.

ѕомимо указанных параметров, зачастую встречаютс€ такие как k=, в рамках которого описываетс€ метод шифровани€, или i=, содержащий дополнительную информацию о сессии. ѕоговорим про параметры пол€ a=:

ѕараметр —интаксис и описание
rtpmap a=rtpmap:<тип> <название_кодировки>/<частота_дискретизации> [/<параметры_кодировани€>].
ƒанный параметр подсказывает имена кодеков, частоту и прочие параметры кодировани€ дл€ данных, обозначенных в параметре m=. Ќапример, у нас a=rtpmap:0 PCMU/8000, означает использование G.711 с импульсно - кодовой модул€цией по U - закону с частотой дискретизации 8000 √ц.
sendrecv
a=sendrecv ƒанный параметр указывает на то, что мы собираемс€ отправл€ть и получать медиа - данные. Ќапример, возможно опци€ отправки (sendonly), только получение (recvonly) и отключени€ медиа (inactive);
ptime a=ptime:<длительность_пакета>
ѕродолжительность RTP - пакет (в миллисекундах). ”словно говор€, какой длительности фрагмент голоса переносит один RTP - пакет;
fmtp a=fmtp:<формат> <специальные_параметры>
ѕараметр описывает дополнительные параметры сессии, например, такие как режим подавлени€ тишины (VAD) и прочие;

ѕолезна ли ¬ам эта стать€?