Table of Contents |
---|
Описание
Новая реализация CDN 2.1 отличается от CDN 2.0 дополнительными возможностями:
- разделение узлов CDN по географическому (EU, US) или другому признаку при помощи групп
- выделение узлов под задачи транскодинга, назначая таким узлам роль Transcoder
Группировка узлов CDN
Серверы в CDN могут быть объединены в группу по географическому (расположение), аппаратному (использование GPU для транскодинга) и другим признакам. Группа указывается в файле настроек flashphoner.properties при помощи параметра
Code Block | ||
---|---|---|
| ||
cdn_groups=group1 |
Один и тот же сервер может входить в несколько групп. Допустим, сервер находится в Европе и используется для транскодинга при помощи GPU:
Code Block | ||
---|---|---|
| ||
cdn_groups=EU,GPU |
Группы узлов используются при выборе маршрута для воспроизведения потока
Серверы, для которых не задана группа, считаются принадлежащими к одной группе
Выделение узлов под задачи транскодинга
Чтобы не загружать серверы, используемые для публикации и просмотра видео в крупной разветвленной CDN, задачами транскодинга, целесообразно выделить под эти задачи узлы с повышенной вычислительной мощностью. Для таких узлов,, кроме Origin и Edge, добавлена роль Transcoder.
Code Block | ||
---|---|---|
| ||
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
:
Code Block | ||||
---|---|---|---|---|
| ||||
profiles:
-webrtc-144:
audio:
type : AudioStreamProfile
codec : opus
rate : 48000
channels : 2
#this part forces transcoding
video:
type : VideoStreamProfile
width : 256
height : 144
codecImpl : OPENH264 |
При запросе на воспроизведение потока, транскодированного по указанному профилю, имя профиля должно быть добавлено к имени потока, например
Code Block | ||
---|---|---|
| ||
test-webrtc-144 |
Рекомендуется для удобства задавать имена профилей, начинающиеся с дефиса.
Параметры профиля
...
opus
mpeg4-generic
speex
...
8000
11025
12000
16000
22050
24000
32000
44100
48000
...
1
2
...
FF
OPENH264
...
В каких случаях поток транскодируется на Edge сервере
Транскодинг потока на Edge сервере включается в следующих случаях:
1. Если приоритет видео кодека в настройках сервера выше, чем видео кодека, указанного в настройках профиля транскодирования. Например, при использовании профиля
Code Block | ||||
---|---|---|---|---|
| ||||
-opus-vp8:
audio:
type : AudioStreamProfile
codec : opus
rate : 48000
channels : 2
video:
type : VideoStreamProfile
width : 320
height : 240
gop : 60
fps : 30
codec : vp8
codecImpl : FF |
и настройки Edge сервера
Code Block | ||
---|---|---|
| ||
codecs=opus,...,h264,vp8,flv,mpv |
VP8 поток будет транскодирован в H264, поскольку приоритет данного кодека выше.
2. Если аудио кодека или частоты дискретизации, указанных в настройках профиля, нет в SDP подписчика, аудио дорожка будет транскодирована в один из форматов, поддерживаемых подписчиком.
Выбор маршрута для воспроизведения потока
Маршруты в CDN строятся на основе периодических рассылок следующих данных:
- Origin рассылает узлам с ролью Transcoder и Edge информацию об опубликованных потоках;
- Transcoder рассылает узлам с ролью Edge в пределах той же группы информацию о потоках, которые уже захвачены им с Origin;
- Edge не рассылает ничего и всегда является конечной точкой маршрута.
Expand | ||
---|---|---|
| ||
Маршрут для воспроизведения потока на 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
Пример распределения потоков в CDN с использованием Transcoder узлов
Здесь
- stream1, stream2, stream3 - потоки. опубликованные на Origin
- stream1-P1 - поток stream1, транскодированный по профилю P1
- stream2-P1 - поток stream1, транскодированный по профилю P2
Получение информации о маршрутах с помощью REST API
Для получения информации о маршрутах используется REST API запрос /cdn/stream/show_routes
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP: http://test.flashphoner.com:8081/rest-api/cdn/stream/show_routes
- HTTPS: https://test.flashphoner.com:8444/rest-api/cdn/stream/show_routes
Здесь:
- test.flashphoner.com - адрес WCS-сервера
- 8081 - стандартный REST / HTTP порт WCS-сервера
- 8444 - стандартный HTTPS порт
- rest-api - обязательная часть URL
- /cdn/show_stream_routes - используемый REST-метод
REST-методы и статусы ответа
...
REST-метод
...
Пример тела REST-запроса
...
Пример тела REST-ответа
...
Статусы ответа
...
Описание
...
/cdn/stream/show_routes
...
Code Block | ||||
---|---|---|---|---|
| ||||
{
"streamName":"test-webrtc-144"
} |
...
Code Block | ||||
---|---|---|---|---|
| ||||
{
"1-PROFILE-192.168.1.220": [
"AudioStreamProfile{bitrate=0, codec='opus', rate=48000, channels=2}",
"VideoStreamProfile{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='null', quality=null}",
"VideoStreamProfile{width=320, height=180, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='FF', quality=null}",
"VideoStreamProfile{width=256, height=144, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='OPENH264', quality=null}"
],
"2-STREAM-192.168.1.220": [
"AudioStreamProfile{bitrate=0, codec='opus', rate=48000, channels=2}",
"VideoStreamProfile{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='', quality=null}",
"VideoStreamProfile{width=320, height=180, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='FF', quality=null}",
"VideoStreamProfile{width=256, height=144, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='OPENH264', quality=null}"
],
"3-NEW-TRANSCODER-192.168.1.220": [],
"4-PROXY-192.168.1.219": [
"AudioStreamProfile{bitrate=0, codec='opus', rate=48000, channels=2}",
"VideoStreamProfile{width=0, height=0, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='', quality=null}"
]
} |
...
200 – OK
500 – Internal Server Error
...
Показать активные маршруты CDN
Параметры
...
Описание
...
Пример
...
Имя потока (c указанием профиля, при необходимости)
...
test-webrtc-144
...
1-PROFILE-192.168.1.220
...
2-STREAM-192.168.1.220
...
AudioStreamProfile{bitrate=0, codec='opus', rate=48000, channels=2}
...
VideoStreamProfile{width=320, height=180, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='FF', quality=null}
...
3-NEW-TRANSCODER-192.168.1.220
...
4-PROXY-192.168.1.219
...
AudioStreamProfile{bitrate=0, codec='opus', rate=48000, channels=2}
...
Include Page | ||||
---|---|---|---|---|
|