Skip to end of metadata
Go to start of metadata

Описание

Новая реализация CDN 2.1 отличается от CDN 2.0 дополнительными возможностями:

  • разделение узлов CDN по географическому (EU, US) или другому признаку при помощи групп
  • выделение узлов под задачи транскодинга, назначая таким узлам роль Transcoder

Группировка узлов CDN

Серверы в 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Зависит от требуемого качества и пропускной способности каналовКачество видео

В каких случаях поток транскодируется на Edge сервере

Транскодинг потока на 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 строятся на основе периодических рассылок следующих данных:

  • Origin рассылает узлам с ролью Transcoder и Edge информацию об опубликованных потоках;
  • Transcoder рассылает узлам с ролью Edge  в пределах той же группы информацию о потоках, которые уже захвачены им с Origin;
  • Edge не рассылает ничего и всегда является конечной точкой маршрута.


Маршрут для воспроизведения потока на 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

{
 "streamName":"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}"
    ],
    "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}",
        "VIDEO{width=320, height=180, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='FF', quality=null}",
        "VIDEO{width=256, height=144, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='OPENH264', quality=null}"
    ],
    "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=180, gop=null, fps=null, bitrate=0, codec='H264', codecImpl='FF', quality=null}",
        "VIDEO{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": [
        "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}"
    ]
}

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 из трех узлов:

  • 192.168.1.219 - Origin
  • 192.168.1.220 - Transcoder
  • 192.168.1.221 - Edge

На Origin публикуется WebRTC H264+opus (48 кГц, стерео) поток test

Воспроизведение потока с Origin без транскодинга при совпадении профилей публикации и воспроизведения

Воспроизводим поток 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}"
    ]

Воспроизведение потока с Transcoder с транскодингом звука

Воспроизводим поток 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}"
    ]

Воспроизведение потока с Transcoder с транскодингом видео

Воспроизводим поток 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

Авторизация узлов, которые пытаются подключиться к 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.0/24

Каждый узел CDN, на котором указана данная настройка, будет принимать соединения только от тех узлов, чьи адреса совпадают с перечисленными либо подходят под указанные маски. Соединения с прочими узлами будут отвергнуты.

Обратная совместимость с CDN 2.0

Обратная совместимость 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.

  • No labels