Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

Описание

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

Если ширина картинки не указана или равна 0, видео масштабируется по указанной высоте, с сохранением соотношения сторон.

Если ширина и высота картинки обе равны 0, видео масштабируется к разрешению 160x120.

В каких случаях поток транскодируется на 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 включено сохранение соотношения сторон при транскодировании (по умолчанию), то при транскодировании потока на 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:
    width : 320

Авторизация узлов в 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.1/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