По средством SDP Template происходит формирование правил, по которым медиа будет согласована между сторонами разговора.  На базе заданного медиа профиля ядро формирует SDP-template, помещает его в тело сообщения INVITE и отправляет на медиа сервер. Последний на базе данного SDP-template формирует OfferSDP и отправляет его назад в ответе 200OK, тем самым со стороны ядра происходит усечение медиа секций в OfferSDP, полученных от абонента.

В текущем разделе описаны реализации:


Формирование SDP-template происходит по средством настройки медиа-профиля

--show-sdp-template

Ключ для вывода информации о sdp-template.

Путь команды:

domain/<DOMIAN>/media-profile/info

Синтаксис:

info <MEDIA_PROFILE_NAME> --show-sdp-template

Параметры:

<MEDIA_PROFILE_NAME> - имя медиа-профиля

Пример:

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/info example --show-sdp-template              
┌─────────────┐
│SDP-Template │
├─────────────┤
│v=0          │
│s=-          │
│c=IN * $     │
│t=$ $        │
│m=audio $ $ *│
│m=video $ $ *│
└─────────────┘

[exec at: 30.01.2023 10:08:44, exec time: 12ms, nodes: ds1@ecss1 v.3.14.12.794]


Механизм SDP-template определяет использование подстановочных знаков (wildcards) в протоколе SDP:

  1.  '*' - все доступные значения;
  2. '$' - любое значение;
  3. '$1, $2, ..., $n' - взаимосвязанные значения.

В случае декларации нового медиа-профиля без настройки параметров таких как версия используемого протокола(IPv4/IPv6), используемого транспортного протокола(--media-proto), частоты дискретизации(--clock-rate ), видео/аудио кодеков,  SDP-template'ом будут использоваться подстановочные знаки '*' и '$' как в примере выше.

Взаимосвязанные значения связывают динамические номера payload type'ов в медиа-секции с кодеками в атрибуте rtpmap, в том случае когда номер полезной нагрузки явно не указан(установлен подстановочный знак "*") в настройках медиа профиля.

Пример:

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/codecs-add example audio speex * SILK * G7221 * 
Media-profile: example adds audio codecs successfully.
Media type configuration:
┌──────────┬────────────┬─────┐
│Codec type│  Property  │Value│
├──────────┼────────────┼─────┤
│audio     │offroad     │true │
│<other>   │offroad     │false│
│          │rtcp-enabled│true │
└──────────┴────────────┴─────┘

Codec type: audio codecs configuration:
┌───────┬─────┬──┬────────┬─────┐
│Enabled│Codec│PT│Property│Value│
├───────┼─────┼──┼────────┼─────┤
│       │G7221│* │        │     │
│       │SILK │* │        │     │
│       │speex│* │        │     │
└───────┴─────┴──┴────────┴─────┘

Legend:
 Enabled  - is codec enabled. Empty means true.
 Codec    - list of codec names and special value <other>.
 PT       - Payload Type, * means any value.
 Property - name of attribute.
 Value    - value of attribute.
If attribute not specified in table it has Default value.

[exec at: 30.01.2023 10:22:45, exec time: 28ms, nodes: ds1@ecss1 v.3.14.12.794]

Вывод информации о сформированном sdp-template в медиа-профиле "example":

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/info example --show-sdp-template                            
┌────────────────────┐
│    SDP-Template    │
├────────────────────┤
│v=0                 │
│s=-                 │
│c=IN * $            │
│t=$ $               │
│m=audio $ $ $1 $2 $3│
│a=rtpmap:$1 G7221/$ │
│a=rtpmap:$2 SILK/$  │
│a=rtpmap:$3 speex/$ │
│m=video $ $ *       │
└────────────────────┘

[exec at: 30.01.2023 10:28:49, exec time: 11ms, nodes: ds1@ecss1 v.3.14.12.794]

Данный шаблон выставляет кодеки в следующем порядке: $1 - speex/$, $2 - SILK/$, $3 - G7221

Wildcard - $1 - связывает номер payload type'а(явно не указанного в настройках медиа-профиля, т.е когда в PT установлен подстановочный знак *) который выберет медиа-сервер  с кодеком speex и ставит на первое место в приоритете.

Wildcard - $2 - связывает номер payload type'а(явно не указанного в настройках медиа-профиля,т.е когда в PT установлен подстановочный знак *) который выберет медиа-сервер, с SILK и ставит на 2 место в приоритете.

Wildcard - $3 - связывает номер payload type'а(явно не указанного в настройках медиа-профиля,т.е когда в PT установлен подстановочный знак *), который выберет медиа-сервер, с G7221 и ставит на последнее место в приоритете.

Включение/выключение медиа-секций (m=audio/video/image)

При декларации нового медиа-профиля по дефолту формируются audio и video секции в sdp-шаблоне. Если удалить секцию  <other> сформируется шаблон без медиа-секций.

<other> -  это внутреннее (для медиа-профиля) представление состояния, при котором допустимы любые значения кодеков.
Однако, данное представление отсутствует в спецификации SDP, поэтому в шаблоне оно преобразуется в набор из медиа-секций audio, video, но не image. Это связано с тем, что не все устройства поддерживают данную секцию. Фактически, сейчас единственный вариант её использования это кодек T38 для факсов. 

Пример:

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/codecs-remove example <other> <other> *              
Media-profile: example removes <other> codecs successfully.
Media type configuration:
┌──────────┬────────┬─────┐
│Codec type│Property│Value│
├──────────┼────────┼─────┤
└──────────┴────────┴─────┘


[exec at: 30.01.2023 11:43:18, exec time: 25ms, nodes: ds1@ecss1 v.3.14.12.794]

вывод информации о SDP-template:

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/info example --show-sdp-template                     
┌────────────┐
│SDP-Template│
├────────────┤
│v=0         │
│s=-         │
│c=IN * $    │
│t=$ $       │
└────────────┘

[exec at: 30.01.2023 11:44:07, exec time: 11ms, nodes: ds1@ecss1 v.3.14.12.794]

В  данной ситуации MSR будет усекать всю медию (audio, video, image)

Для того, что бы  включить audio - секцию требуется добавить  в медиа-профиль один или несколько аудио-кодеков

Пример:

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/codecs-add example audio G7221 *            
Media-profile: example removes audio codecs successfully.
Media type configuration:
┌──────────┬────────┬─────┐
│Codec type│Property│Value│
├──────────┼────────┼─────┤
│audio     │offroad │true │
└──────────┴────────┴─────┘

Codec type: audio codecs configuration:
┌───────┬─────┬──┬────────┬─────┐
│Enabled│Codec│PT│Property│Value│
├───────┼─────┼──┼────────┼─────┤
│       │G7221│* │        │     │
└───────┴─────┴──┴────────┴─────┘

Legend:
 Enabled  - is codec enabled. Empty means true.
 Codec    - list of codec names and special value <other>.
 PT       - Payload Type, * means any value.
 Property - name of attribute.
 Value    - value of attribute.
If attribute not specified in table it has Default value.

[exec at: 30.01.2023 16:09:33, exec time: 22ms, nodes: ds1@ecss1 v.3.14.12.794]


Вывод информации о сформированном sdp-template в медиа-профиле "example":

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/info example --show-sdp-template 
┌─────────────┐
│SDP-Template │
├─────────────┤
│v=0          │
│s=-          │
│c=IN * $     │
│t=$ $        │
│m=audio $ $ 0│
└─────────────┘

[exec at: 30.01.2023 15:58:26, exec time: 10ms, nodes: ds1@ecss1 v.3.14.12.794]

Порты и транспорт обозначены через wildcard '$' и будут иметь значения, выбранные медиа-сервером. Список payload type номеров представлен через '*' - MSR будет использовать все поддерживаемые аудио/видео-кодеки с любыми Payload Type.

Управление медиа-транспортом

В медиа-профиле  командой "codec-set" по средством параметра -- media-proto осуществляется управление медиа-транспортом. Из списка предложенных выбирается необходимый транспортный протокол.

Пример:

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/codecs-set example audio G7221 * --media-proto RTP/SAVP              
Media-profile: example set audio codecs successfully.
Media type configuration:
┌──────────┬────────┬─────┐
│Codec type│Property│Value│
├──────────┼────────┼─────┤
│audio     │offroad │true │
└──────────┴────────┴─────┘

Codec type: audio codecs configuration:
┌───────┬─────┬──┬───────────┬────────┐
│Enabled│Codec│PT│ Property  │ Value  │
├───────┼─────┼──┼───────────┼────────┤
│       │G7221│* │media-proto│RTP/SAVP│
└───────┴─────┴──┴───────────┴────────┘

Legend:
 Enabled  - is codec enabled. Empty means true.
 Codec    - list of codec names and special value <other>.
 PT       - Payload Type, * means any value.
 Property - name of attribute.
 Value    - value of attribute.
If attribute not specified in table it has Default value.

[exec at: 31.01.2023 09:43:21, exec time: 28ms, nodes: ds1@ecss1 v.3.14.12.794]

Вывод информации о сформированном sdp-template в медиа-профиле "example":

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/info example --show-sdp-template                                     
┌─────────────────────┐
│    SDP-Template     │
├─────────────────────┤
│v=0                  │
│s=-                  │
│c=IN * $             │
│t=$ $                │
│m=audio $ RTP/SAVP $1│
│a=rtpmap:$1 G7221/$  │
└─────────────────────┘

[exec at: 31.01.2023 09:44:50, exec time: 12ms, nodes: ds1@ecss1 v.3.14.12.794]

Управление приоритетом кодеков

Управление приоритетом кодеков происходит по средством команды  "codecs-priority" в настрйках медиа-профиля.

Добавляется еще один аудио кодек PCMA для медиа профиля "example"

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/codecs-add example audio PCMA  8              
Media-profile: example adds audio codecs successfully.
Media type configuration:
┌──────────┬────────┬─────┐
│Codec type│Property│Value│
├──────────┼────────┼─────┤
│audio     │offroad │true │
└──────────┴────────┴─────┘

Codec type: audio codecs configuration:
┌───────┬─────┬──┬───────────┬────────┐
│Enabled│Codec│PT│ Property  │ Value  │
├───────┼─────┼──┼───────────┼────────┤
│       │G7221│* │media-proto│RTP/SAVP│
│       │PCMA │8 │           │        │
└───────┴─────┴──┴───────────┴────────┘

Legend:
 Enabled  - is codec enabled. Empty means true.
 Codec    - list of codec names and special value <other>.
 PT       - Payload Type, * means any value.
 Property - name of attribute.
 Value    - value of attribute.
If attribute not specified in table it has Default value.

[exec at: 31.01.2023 10:14:00, exec time: 49ms, nodes: ds1@ecss1 v.3.14.12.794]

Вывод информации о сформированном sdp-template в медиа-профиле "example":

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/info example --show-sdp-template                                     
┌─────────────────────┐
│    SDP-Template     │
├─────────────────────┤
│v=0                  │
│s=-                  │
│c=IN * $             │
│t=$ $                │
│m=audio $ RTP/SAVP $1│
│a=rtpmap:$1 G7221/$  │
│m=audio $ $ 8        │
└─────────────────────┘

[exec at: 31.01.2023 10:14:06, exec time: 10ms, nodes: ds1@ecss1 v.3.14.12.794]

Обратим внимание на два момента: 

1) В таблице конфигурации кодеков в приоритете находится аудио кодек PCMA;

2) Кодек PCMA c PayloadType описан в IANA. Его параметры известны, потому все дополнительные параметры опущены. В более вариативных кодеках, как в нашем случае G7221 дополнительные параметры мы увидем в блоке rtpmap.

Установим приоритет для кодека PCMA выше:
admin@[mycelium1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/codecs-priority example audio PCMA 8  up          
Media-profile: example priority changed for audio codecs successfully.
Media type configuration:
┌──────────┬────────┬─────┐
│Codec type│Property│Value│
├──────────┼────────┼─────┤
│audio     │offroad │true │
└──────────┴────────┴─────┘

Codec type: audio codecs configuration:
┌───────┬─────┬──┬───────────┬────────┐
│Enabled│Codec│PT│ Property  │ Value  │
├───────┼─────┼──┼───────────┼────────┤
│       │PCMA │8 │           │        │
│       │G7221│* │media-proto│RTP/SAVP│
└───────┴─────┴──┴───────────┴────────┘

Legend:
 Enabled  - is codec enabled. Empty means true.
 Codec    - list of codec names and special value <other>.
 PT       - Payload Type, * means any value.
 Property - name of attribute.
 Value    - value of attribute.
If attribute not specified in table it has Default value.

[exec at: 03.02.2023 15:26:06, exec time: 35ms, nodes: ds1@ecss1 v.3.14.12.837]

Вывод информации о сформированном sdp-template в медиа-профиле "example":

admin@[mycelium1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/info example --show-sdp-template                      
┌─────────────────────┐
│    SDP-Template     │
├─────────────────────┤
│v=0                  │
│s=-                  │
│c=IN * $             │
│t=$ $                │
│m=audio $ $ 8        │
│m=audio $ RTP/SAVP $1│
│a=rtpmap:$1 G7221/$  │
└─────────────────────┘

[exec at: 03.02.2023 15:26:39, exec time: 17ms, nodes: ds1@ecss1 v.3.14.12.837]


В этом случае кодек G7221 занял первую очередь в списке разрешенных кодеков.

Назначение динамических payload type номеров

Payload Type для кодека, это числовой параметр, система будет предлагать автоматически стандартное PT по имени кодека согласно IANA, но можно задать свой PT, если он не стандартный в медиа-профиле командой "codecs-set" по средством параметра <codec-pt>.

Пример:

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/codecs-set example audio G7221 111              
Media-profile: example set audio codecs successfully.
Media type configuration:
┌──────────┬────────┬─────┐
│Codec type│Property│Value│
├──────────┼────────┼─────┤
│audio     │offroad │true │
└──────────┴────────┴─────┘

Codec type: audio codecs configuration:
┌───────┬─────┬───┬────────┬─────┐
│Enabled│Codec│PT │Property│Value│
├───────┼─────┼───┼────────┼─────┤
│       │G7221│111│        │     │
└───────┴─────┴───┴────────┴─────┘

Legend:
 Enabled  - is codec enabled. Empty means true.
 Codec    - list of codec names and special value <other>.
 PT       - Payload Type, * means any value.
 Property - name of attribute.
 Value    - value of attribute.
If attribute not specified in table it has Default value.

[exec at: 31.01.2023 11:12:59, exec time: 28ms, nodes: ds1@ecss1 v.3.14.12.794]

Вывод информации о сформированном sdp-template в медиа-профиле "example":

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/info example --show-sdp-template                
┌────────────────────┐
│    SDP-Template    │
├────────────────────┤
│v=0                 │
│s=-                 │
│c=IN * $            │
│t=$ $               │
│m=audio $ $ 111     │
│a=rtpmap:111 G7221/$│
└────────────────────┘

[exec at: 31.01.2023 11:13:07, exec time: 13ms, nodes: ds1@ecss1 v.3.14.12.794]

В данном примере указали динамический Payload Type с номером 111 для кодека G7221.

Управление разрешением видеопотока

В медиа-профиле  командой "set" по средством параметра -- send-video-resolution и  recv-video-resolution осуществляется управление исходящего и входящего видеопотока для всего профиля.

Разрешение отдельных кодеков не настраивается

Пример:

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/set example recv-video-resolution HD(1280x720)    
Media-profile: example set recv-video-resolution successfully.

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/set example send-video-resolution HD(1280x720)  
Media-profile: example set send-video-resolution successfully.

Media-profile detailed information:

┌─────────────────────┬────────────┐
│      Parameter      │   Value    │
├─────────────────────┼────────────┤
│name                 │example     │
│description          │test        │
│codecs-priority      │system      │
│addr-type            │*           │
│dtmf-receive-type    │auto        │
│dtmf-transmit-type   │transit     │
│recv-video-resolution│HD(1280x720)│
│send-video-resolution│HD(1280x720)│
└─────────────────────┴────────────┘

Media type configuration:
┌──────────┬────────┬─────┐
│Codec type│Property│Value│
├──────────┼────────┼─────┤
│audio     │offroad │true │
└──────────┴────────┴─────┘

Codec type: audio codecs configuration:
┌───────┬─────┬───┬────────┬─────┐
│Enabled│Codec│PT │Property│Value│
├───────┼─────┼───┼────────┼─────┤
│       │G7221│111│        │     │
└───────┴─────┴───┴────────┴─────┘

Legend:
 Enabled  - is codec enabled. Empty means true.
 Codec    - list of codec names and special value <other>.
 PT       - Payload Type, * means any value.
 Property - name of attribute.
 Value    - value of attribute.
If attribute not specified in table it has Default value.

[exec at: 31.01.2023 14:26:06, exec time: 26ms, nodes: ds1@ecss1 v.3.14.12.794]

Вывод информации о сформированном sdp-template в медиа-профиле "example":

admin@[ds1@ecss1#ECSS 010070]:/$ domain/evn/media-profile/info example --show-sdp-template                            
┌─────────────────────────────────┐
│          SDP-Template           │
├─────────────────────────────────┤
│v=0                              │
│s=-                              │
│c=IN * $                         │
│t=$ $                            │
│m=audio $ $ 111                  │
│a=rtpmap:111 G7221/$             │
│m=video $ $ *                    │
│a=imageattr:* recv [x=1280,y=720]│
│a=imageattr:* send [x=1280,y=720]│
└─────────────────────────────────┘

[exec at: 31.01.2023 14:35:38, exec time: 11ms, nodes: ds1@ecss1 v.3.14.12.794]


В данном примере для медиа-профиля настроено входящее -  HD(1280x720) и исходящее - HD(1280x720) разрешение видеопотока.