CDN 2.7¶
Overview¶
CDN 2.7 дает следующие дополнительные возможности по сравнению с предыдущими версиями:
- выделенный сервер для записи потоков, опубликованных на Origin серверах данной CDN
Выделенный Recorder сервер для записи потоков¶
Начиная со сборки 5.2.2173, выделенный узел с ролью Recorder может быть добавлен в CDN
Такой узел захватывает потоки, опубликованные на Origin серверы CDN, в соответствии с правилами фильтрации и записывает их на диск. Потоки могут быть транскодированы для записи по заданному профилю. В этом смысле, Recorder сервер выглядит как Edge для остальных серверов CDN.
Warning
Крайне рекомендуется использовать высокопроизводительное хранилище на базе быстрых SSD дисков для записи большого количества потоков в CDN
Фильтрация потоков¶
По умолчанию, потоки не записываются. Для того, чтобы записывать потоки, необходим файл настроек /usr/local/FlashphonerWebCallServer/conf/cdn_recorder_trap.json
. Таким образом, предотвращается излишняя загрузка каналов внутри CDN и собственно Recorder сервера.
Простейшая настройка, которая разрешает запись всех потоков в CDN на этом сервере (не рекомендуется использовать в промышленной эксплуатации)
Потоки в 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 сервере следующую настройку
Однако этого следует избегать, чтобы не перегрузить 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¶
Return codes¶
Code | Reason |
---|---|
200 | OK |
400 | Bad request |
500 | Internal server error |
/cdn/recorder/trap/show¶
Показать текущие фильтры для записи потоков, доступные в файле cdn_recorder_trap.json
Request example¶
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¶
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 |
Обратная совместимость¶
- Recorder сервер считается Edge сервером для Origin и Transcoder серверов преджыдущей версии CDN