Новая реализация CDN 2.1 отличается от CDN 2.0 дополнительными возможностями:
Серверы в CDN могут быть объединены в группу по географическому (расположение), аппаратному (использование GPU для транскодинга) и другим признакам. Группа указывается в файле настроек flashphoner.properties при помощи параметра
cdn_groups=group1 |
Один и тот же сервер может входить в несколько групп. Допустим, сервер находится в Европе и используется для транскодинга при помощи GPU:
cdn_groups=EU,GPU |
Группы узлов используются при выборе маршрута для воспроизведения потока
Серверы, для которых не задана группа, считаются принадлежащими к одной группе
Чтобы не загружать серверы, используемые для публикации и просмотра видео в крупной разветвленной CDN, задачами транскодинга, целесообразно выделить под эти задачи узлы с повышенной вычислительной мощностью. Для таких узлов,, кроме Origin и Edge, добавлена роль Transcoder.
cdn_role=transcoder |
Узел Transcoder не должен использоваться для публикации или воспроизведения потока. Он взаимодействует с Origin и Edge серверами следующим образом:
1. Поток буликуется на Origin сервер.
2. Transcoder забирает с Origin поток по запросу Edge сервера.
3. Transcoder транскодирует поток в соответствии с настройками, указанными Edge сервером.
4. Edge забирает с Transcoder поток для воспроизведения.
Конкретный узел для транскодирования выбирается при выборе маршрута для воспроизведения потока.
Для настройки транскодинга на Edge сервере используются профили. Файл профилей транскодинга cdn_profiles.yml
должен располагаться в каталоге /usr/local/FlashphonerWebCallServer/conf
:
profiles: -webrtc-144: audio: codec : opus rate : 48000 channels : 2 video: width : 256 height : 144 codecImpl : OPENH264 |
При запросе на воспроизведение потока, транскодированного по указанному профилю, имя профиля должно быть добавлено к имени потока, например
test-webrtc-144 |
Рекомендуется для удобства задавать имена профилей, начинающиеся с дефиса.
Параметр | Допустимые значения | Описание |
---|---|---|
Параметры аудио | ||
codec | opus mpeg4-generic speex | Используемый кодек аудио |
bitrate | Зависит от требуемого качества и пропускной способности каналов | Битрейт звука, бит/с |
rate | 8000 11025 12000 16000 22050 24000 32000 44100 48000 | Частота дискретизации звука |
channels | 1 2 | Количество каналов: моно или стерео |
Параметры видео | ||
codec | h264 vp8 | Используемый кодек видео |
bitrate | Зависит от требуемого качества и пропускной способности каналов | Битрейт видео, кбит/с |
width | Зависит от требуемого качества и пропускной способности каналов | Ширина картинки |
height | Зависит от требуемого качества и пропускной способности каналов | Высота картинки |
codeImpl | FF OPENH264 | Используемый кодек видео: на основе FFmpeg или OpenH.264 |
gop | Зависит от требуемого качества и пропускной способности каналов | Частота отправки ключевых кадров (GOP) |
fps | Зависит от требуемого качества и пропускной способности каналов | Частота кадров |
quality | Зависит от требуемого качества и пропускной способности каналов | Качество видео |
preset | ultrafast superfast veryfast faster fast medium slow slower veryslow placebo | Пресет FFmpeg, по умолчанию ultrafast |
profile | Зависит от требуемого качества | Профиль кодирования FFmpeg, по умолчанию Baseline |
level | Зависит от требуемого качества | Уровень кодирования FFmpeg, по умолчанию 3.1 |
Если ширина картинки не указана или равна 0, видео масштабируется по указанной высоте, с сохранением соотношения сторон.
Если ширина и высота картинки обе равны 0, видео масштабируется к разрешению 160x120.
При использовании FFmpeg можно выбрать предустановки (пресет) кодирования, профиль и уровень кодирования. Например, следующие параметры
profile1: audio: codec : opus rate : 48000 video: width : 640 height : 360 gop : 90 fps : 30 codec : h264 profile : 77 level : 31 preset : veryfast |
задают использование пресета veryfast
, профиля Main
и уровня 3.1
Транскодинг потока на Edge сервере включается в следующих случаях:
1. Если приоритет видео кодека в настройках сервера выше, чем видео кодека, указанного в настройках профиля транскодирования. Например, при использовании профиля
-opus-vp8: audio: codec : opus rate : 48000 channels : 2 video: width : 320 height : 240 gop : 60 fps : 30 codec : vp8 codecImpl : FF |
и настройки Edge сервера
codecs=opus,...,h264,vp8,flv,mpv |
VP8 поток будет транскодирован в H264, поскольку приоритет данного кодека выше.
2. Если аудио кодека или частоты дискретизации, указанных в настройках профиля, нет в SDP подписчика, аудио дорожка будет транскодирована в один из форматов, поддерживаемых подписчиком.
Если на всех узлах CDN включено сохранение соотношения сторон при транскодировании (по умолчанию), то при транскодировании потока на Transcoder узле также будет сохранено исходное соотношение сторон, с которым этот поток был опубликован на Oriigin. Например, если к потоку 640x480 (4:3) применяется профиль 16:9
profile1: audio: codec : opus rate : 48000 video: width : 320 height : 180 gop : 90 fps : 30 codec : h264 |
поток будет транскодирован в 320x240 (4:3).
В этом случае можно не указывать ширину кадра в профиле транскодирования, поскольку ширина будет выбрана, исходя из соотношения сторон. Например, допускается такой профиль
profile3: audio: codec : opus rate : 48000 video: height : 180 |
Маршруты в CDN строятся на основе периодических рассылок следующих данных:
Маршрут для воспроизведения потока на Edge сервере выбирается следующим образом:
1. Если на Edge сервере настроен профиль транскодирования:
1.1. Если на Transcoder в одной группе с Edge есть поток с таким именем:
1.1.1. Если поток уже транскодируется по указанному профилю, Edge забирает поток с Transcoder
1.1.2. Если поток транскодируется по другому профилю:
1.1.2.1. Поток транскодируется по указанному профилю
1.1.2.2. Edge забирает поток с Transcoder
1.2. Если Transcoder в одной группе с Edge может забрать запрошенный поток с Origin:
1.2.1. Transcoder забирает поток с Origin
1.2.2. Поток транскодируется по указанному профилю
1.2.3. Edge забирает поток с Transcoder
1.3. В остальных случаях Edge забирает поток с Origin
2. Если на Edge сервере не настроен профиль транскодирования, Edge забирает поток с Origin
Здесь
Для получения информации о маршрутах используется REST API запрос /cdn/stream/show_routes
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
Здесь:
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | ||
---|---|---|---|---|---|---|
/cdn/stream/show_routes |
|
| 200 – OK 500 – Internal Server Error | Показать активные маршруты CDN |
Описание | Пример |
---|---|
Имя потока (c указанием профиля, при необходимости) | test-webrtc-144 |
Параметры запрашиваемого профиля транскодирования | |
Параметры запрашиваемого профиля | REQUESTED-PROFILE |
Параметры аудио, указанные в профиле | AUDIO{bitrate=0, codec='opus', rate=48000, channels=2} |
Параметры видео, указанные в профиле | VIDEO{width=256, height=144, gop=null, fps=null, bitrate=0, codec='h264', codecImpl='OPENH264', quality=null} |
Параметры потока на Transcoder | |
Параметры профилей транскодирования, используемых в данный момент на Transcoder | 1-PROFILE-192.168.1.220 |
Параметры потока, который Transcoder забрал с Origin | 2-STREAM-192.168.1.220 |
Параметры профиля аудио | AUDIO{bitrate=0, codec='opus', rate=48000, channels=2} |
Параметры профиля видео (в соответствии с работающими в данный момент профилями транскодирования) | VIDEO{width=320, height=180, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='FF', quality=null} |
Параметры потока, который Trancoder может забрать с Origin | 3-NEW-TRANSCODER-192.168.1.220 |
Параметры потока на Origin | |
Параметры потока, который опубликован на Origin | 4-PROXY-192.168.1.219 |
Параметры аудио | AUDIO{bitrate=0, codec='opus', rate=48000, channels=2} |
Параметры видео | VIDEO{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='', quality=null} |
Рассмотрим несколько примеров построения маршрутов для воспроизведения потока в CDN.
В качестве примера возьмем CDN из трех узлов:
На Origin публикуется WebRTC H264+opus (48 кГц, стерео) поток test
Воспроизводим поток test на Edge по профилю
-webrtc-opus-video-proxy: audio: codec : opus rate : 48000 channels : 2 video: codec: h264 |
В ответ на запрос
http://192.168.1.221:8081/rest-api/cdn/stream/show_routes { "streamName": "test-webrtc-opus-video-proxy" } |
получаем:
1. Запрашиваемый профиль:
"REQUESTED-PROFILE": [ "AUDIO{bitrate=0, codec='opus', rate=48000, channels=2}", "VIDEO{width=0, height=0, gop=null, fps=null, bitrate=0, codec='h264', codecImpl='null', quality=null}" ], |
2. Поток захватывается с Origin:
"1-PROXY-PROFILE-192.168.1.219": [ "AUDIO{bitrate=0, codec='opus', rate=48000, channels=2}", "VIDEO{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='', quality=null}" ], |
3. Поток может быть захвачен через Transcoder
"2-NEW-TRANSCODER-192.168.1.220": [], |
4. Но захвачен с Origin, поскольку параметры публикации потока совпадают с запрошенными параметрами воспроизведения:
"3-PROXY-192.168.1.219": [ "AUDIO{bitrate=0, codec='opus', rate=48000, channels=2}", "VIDEO{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='', quality=null}" ] |
Воспроизводим поток test на Edge по профилю
-webrtc-pcma-video-proxy: audio: codec : pcma rate : 8000 channels : 1 |
В ответ на запрос
http://192.168.1.221:8081/rest-api/cdn/stream/show_routes { "streamName": "test-webrtc-pcma-video-proxy" } |
получаем:
1. Запрашиваемый профиль:
"REQUESTED-PROFILE": [ "AUDIO{bitrate=0, codec='pcma', rate=8000, channels=1}" ], |
2. На Transcoder создан профиль транскодирования:
"1-PROFILE-192.168.1.220": [ "AUDIO{bitrate=0, codec='opus', rate=48000, channels=2}", "VIDEO{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='null', quality=null}", "AUDIO{bitrate=0, codec='PCMA', rate=8000, channels=1}" ], |
3. Поток захватывается через Transcoder
"2-STREAM-192.168.1.220": [ "AUDIO{bitrate=0, codec='opus', rate=48000, channels=2}", "VIDEO{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='null', quality=null}", "AUDIO{bitrate=0, codec='PCMA', rate=8000, channels=1}" ], "3-NEW-TRANSCODER-192.168.1.220": [], |
4. Параметры публикации потока на Origin:
"3-PROXY-192.168.1.219": [ "AUDIO{bitrate=0, codec='opus', rate=48000, channels=2}", "VIDEO{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='', quality=null}" ] |
Воспроизводим поток test на Edge по профилю
-opus-vp8: audio: codec : opus rate : 48000 channels : 2 video: width : 320 height : 240 gop : 60 fps : 30 codec : vp8 codecImpl : FF |
В ответ на запрос
http://192.168.1.221:8081/rest-api/cdn/stream/show_routes { "streamName": "test-webrtc-opus-vp8" } |
получаем:
1. Запрашиваемый профиль:
"REQUESTED-PROFILE": [ "AUDIO{bitrate=0, codec='opus', rate=48000, channels=2}", "VIDEO{width=320, height=240, gop=60, fps=30, bitrate=0, codec='vp8', codecImpl='FF', quality=null}" ], |
2. На Transcoder создан профиль транскодирования:
"1-PROFILE-192.168.1.220": [ "AUDIO{bitrate=0, codec='opus', rate=48000, channels=2}", "VIDEO{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='', quality=null}", "VIDEO{width=320, height=240, gop=60, fps=30, bitrate=0, codec='VP8', codecImpl='FF', quality=null}" ], |
3. Поток захватывается через Transcoder
"2-STREAM-192.168.1.220": [ "AUDIO{bitrate=0, codec='opus', rate=48000, channels=2}", "VIDEO{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='', quality=null}", "VIDEO{width=320, height=240, gop=60, fps=30, bitrate=0, codec='VP8', codecImpl='FF', quality=null}" ], "3-NEW-TRANSCODER-192.168.1.220": [], |
4. Параметры публикации потока на Origin:
"3-PROXY-192.168.1.219": [ "AUDIO{bitrate=0, codec='opus', rate=48000, channels=2}", "VIDEO{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='', quality=null}" ] |
Авторизация узлов, которые пытаются подключиться к CDN, производится по IP-адресу. Адреса узлов, которые могут войти в CDN, должны быть указаны в следующей настройке
cdn_allowed_ips=192.168.1.39, 192.168.100.64, 192.168.101.65 |
Также в этой настройке могут быть указаны маски адресов, например
cdn_allowed_ips=192.168.1.39, 192.168.100.1/24 |
Каждый узел CDN, на котором указана данная настройка, будет принимать соединения только от тех узлов, чьи адреса совпадают с перечисленными либо подходят под указанные маски. Соединения с прочими узлами будут отвергнуты.
Обратная совместимость CDN 2.1 с CDN 2.0 поддерживается для следующих случаев:
1. Edge 2.0 может забирать потоки с Origin 2.1
2. Edge 2.1 может забирать потоки с Origin 2.0
При этом транскодинг работает согласно настройке кодеков и SDP по принципам, определенным для CDN 2.0.
1. Не рекомендуется публиковать поток с одним и тем же именем на двух Origin серверах одной CDN
2. Поток, опубликованный на одном из Origin серверов, следует забирать с этого же Origin или Edge сервера (в том числе через Transcoder сервер), но не с другого Origin сервера в той же CDN.