Перейти к содержанию

CDN 2.7

Overview

CDN 2.7 дает следующие дополнительные возможности по сравнению с предыдущими версиями:

  • выделенный сервер для записи потоков, опубликованных на Origin серверах данной CDN

Выделенный Recorder сервер для записи потоков

Начиная со сборки 5.2.2173, выделенный узел с ролью Recorder может быть добавлен в CDN

cdn_role=recorder

Такой узел захватывает потоки, опубликованные на Origin серверы CDN, в соответствии с правилами фильтрации и записывает их на диск. Потоки могут быть транскодированы для записи по заданному профилю. В этом смысле, Recorder сервер выглядит как Edge для остальных серверов CDN.

Warning

Крайне рекомендуется использовать высокопроизводительное хранилище на базе быстрых SSD дисков для записи большого количества потоков в CDN

Фильтрация потоков

По умолчанию, потоки не записываются. Для того, чтобы записывать потоки, необходим файл настроек /usr/local/FlashphonerWebCallServer/conf/cdn_recorder_trap.json. Таким образом, предотвращается излишняя загрузка каналов внутри CDN и собственно Recorder сервера.

Простейшая настройка, которая разрешает запись всех потоков в CDN на этом сервере (не рекомендуется использовать в промышленной эксплуатации)

{
    "streams":
    [
        {
            "streamName": ".*"
        }
    ] 
}

Потоки в CDN могут быть отфильтрованы для записи на данном Recorder сервере по имени потока, доменному имени или адресу Origin сервера, например

{
    "streams":
    [
        {
            "streamName": "test.*",
            "serverNames": [ "123.mycooldomain" ],
            "profile": ""
        },
        {
            "streamName": "web.*",
            "serverIps": [ "172.16.1.0/16" ],
            "profile": "720p"
        },
        {
            "streamName": "s.*",
            "serverIps": [ "172.16.1.39", "123.mylocaldomain" ]
        }
    ],
    "defaultProfile" : "360p"
}

Здесь

  • streamName - маска имени потока для записи
  • serverNames - список доменных имен Origin серверов для записи потоков, опубликованных на этих серверах
  • serverIps - список IP адресов Origin серверов для записи потоков, опубликованных на этих серверах
  • profile - профиль для транскодирования потьока перед записью
  • defaultProfile - профиль для транскодирования по умолчанию, если профиль не указан в конкретном фильтре

Файл cdn_recorder_trap.json может быть изменен без перезапука WCS, изменения применяются на лету. При этом:

  • если поток записывается по определенному правилу фильтрации, и подходит под это правило после изменения настройки, запись потока продолжится
  • если поток записывается по определенному правилу фильтрации, и больше не подходит под это правило после изменения настройки, запись потока останавливается
  • если изменился профиль транскодирования, запись потока остановится и запустится заново по новому профилю

Такую настройку можно использовать, чтобы временно остановить запись всех потоков на этом Recorder сервере

{}

Если файл cdn_recorder_trap.json был испорчен при редактировании, последняя рабочая конфигурация будет сохранена в файл cdn_recorder_trap.json.backup, и запись потоков продолжится по этой конфигурации.

Транскодирование потоков

Если потоки записываются в целях мониторинга, может потребоваться снизить разрешение и битрейт потоков перед записью. В этом случае, профили транскодинга должны быть описаны в файле /usr/local/FlashphonerWebCallServer/conf/cdn_profiles.yml на Recorder сервере, например

profiles:
  -240p:
    audio:
      codec: mpeg4-generic
      rate: 44100
      channels: 1
      groupId: audio
    video:
      width: 0
      height: 240
      bitrate: 500
      codec: h264
      gop: 60
      fps: 30
      audioGroupId: audio

  -480p:
    audio:
      codec: mpeg4-generic
      rate: 44100
      channels: 1
      groupId: audio
    video:
      width: 0
      height: 480
      bitrate: 700
      codec: h264
      gop: 60
      fps: 30
      audioGroupId: audio

Recorder сервер запрашивает поток для записи через Transcoder узлы по профилю, указанному в файле cdn_recorder_trap.json (см выше). Поток не может быть записан, если в CDN нет доступных транскодеров.

Если Transcoder серверы в принципе отсутствуют в данной CDN, можно разрешить транскодирование на Origin серверах, указав на Recorder сервере следующую настройку

cdn_origin_allowed_to_transcode=true

Однако этого следует избегать, чтобы не перегрузить Origin серверы.

Настройка записи

По умолчанию, файлам записей присваивается имя по шаблону {streamName}-{startTime}-{endTime}, например

-rw-rw-r-- 1 flashphoner flashphoner 42902738 Jan 24 03:25 fptest-480p-4069687945602-4069688261635.mp4
-rw-rw-r-- 1 flashphoner flashphoner 20640553 Jan 24 03:28 fptest-480p-4069688301602-4069688439669.mp4
-rw-rw-r-- 1 flashphoner flashphoner 24490079 Jan 24 03:23 test-1860699141421-1860699318669.mp4
-rw-rw-r-- 1 flashphoner flashphoner 25429162 Jan 24 03:28 test-1860699462631-1860699642985.mp4

Все настройки записи могут применяться к записям на Recorder сервере так же, как и к обычным записям.

Управление настройками записи по REST API

Настройками записи потоков на Recorder сервере можно управлять при помощи REST API запросов, отправляемых на Recorder сервер.

REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:

  • HTTP: http://test.flashphoner.com:8081/rest-api/cdn/recorder/trap/show
  • HTTPS: https://test.flashphoner.com:8444/rest-api/cdn/recorder/trap/show

Здесь:

  • test.flashphoner.com - адрес WCS-сервера
  • 8081 - стандартный REST / HTTP порт WCS-сервера
  • 8444 - стандартный HTTPS порт
  • rest-api - обязательная часть URL
  • /cdn/recorder/trap/show - используемый REST-метод

/cdn/recorder/trap/add

Добавить фильтр для записи потоков в файл cdn_recorder_trap.json

Request example
POST /rest-api/cdn/recorder/trap/add HTTP/1.1
Host: localhost:8081
Content-Type: application/json

{
    "streamName": "stream1"
}
Response example
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json
Return codes
Code Reason
200 OK
400 Bad request
500 Internal server error

/cdn/recorder/trap/show

Показать текущие фильтры для записи потоков, доступные в файле cdn_recorder_trap.json

Request example
POST /rest-api/cdn/recorder/trap/show HTTP/1.1
Host: localhost:8081
Content-Type: application/json
Response example
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json

{
    "streams": [
        {
            "streamName": "stream.*",
            "id": "aa5498dd91e312ff5f88e7eb26d0c019"
        }
    ],
    "defaultProfile": ""
}
Return codes
Code Reason
200 OK
404 Not found

/cdn/recorder/trap/remove

Удалить фильтр для записи потоков из файла cdn_recorder_trap.json по идентификатору. Идентификатор фильтра отображается в ответе на запрос /cdn/recorder/trap/show.

Request example
POST /rest-api/cdn/recorder/trap/remove HTTP/1.1
Host: localhost:8081
Content-Type: application/json

{
    "id": "aa5498dd91e312ff5f88e7eb26d0c019"
}
Response example
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json
Return codes
Code Reason
200 OK
404 Not found

/cdn/recorder/trap/show_active

Показать текущие записи потоков

Request example
POST /rest-api/cdn/recorder/trap/show_active HTTP/1.1
Host: localhost:8081
Content-Type: application/json
Response example
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json

[
    "web1-720p 172.16.1.233",
    "web2-720p 172.16.1.234",
    "s1-360p 172.16.1.39",
    "s2-360p 172.16.1.39"
]
Return codes
Code Reason
200 OK
404 Not found

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

  1. Recorder сервер считается Edge сервером для Origin и Transcoder серверов преджыдущей версии CDN