CDN 2.2¶
Описание¶
CDN 2.2 реализует следующие дополнительные возможности по сравнению с CDN 2.0 и 2.1:
- управление доступом к потокам внутри CDN
Управление доступом к потокам в CDN¶
CDN 2.2 позволяет ограничивать доступ к определенным потокам в CDN для подписчиков. Доступ защищается ключами, организованными в списки контроля доступа (ACL) для каждого потока. Подписчик может запросить поток для воспроизведения, только указав правильный ключ. Ключ указывается при помощи специального параметра, передаваемого при установке соединения с сервером.
Новый поток публикуется на Origin сервере как доступный всем подписчикам по умолчанию. Назначение ключей и дальнейшее управление списками контроля доступа к потоку производится на Origin сервере при помощи REST API.
Любые изменения в ACL потока немедленно рассылаются всем серверам в CDN, и при получении применяются сервером. Таким образом, если ключ подписчика больше не входит в ACL потока, воспроизведение для этогоподписчика будет остановлено с признаком ошибки Restricted access.
После остановки и повторной публикации потока с таким же именем, он создается с чистым ACL, т.е. доступным всем подписчикам.
Настройка¶
Для того, чтобы указать наименование параметра, при помощи которого подписчики будут передавать ключи доступа, необходимо установить следующий параметр в файле flashphoner.properties на всех серверах одной CDN
В данном случае параметр будет называться aclAuth
Чтобы удостовериться, что значения ключей не могут быть перехвачены, рекомендуется переключить CDN на использование SSL при помощи параметра
Управление списками контроля доступа к потоку при помощи REST API¶
Для управления ключами доступа к потоку на Origin сервере используется REST API
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP:
http://test.flashphoner.com:8081/rest-api/cdn/stream/access_list/add
- HTTPS:
https://test.flashphoner.com:8444/rest-api/cdn/stream/access_list/add
Здесь:
test.flashphoner.com
- адрес WCS-сервера8081
- стандартный REST / HTTP порт WCS-сервера8444
- стандартный HTTPS портrest-api
- обязательная часть URL/rest-api/cdn/stream/access_list/add
- используемый REST-метод
/cdn/stream/access_list/add¶
Добавить ключи в список контроля доступа к потоку
Request example¶
POST /rest-api/cdn/stream/access_list/add HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"name":"test",
"keys":["key1","key2","key3"]
}
Response example¶
Return codes¶
Code | Reason |
---|---|
200 | OK |
400 | Bad request |
404 | Not found |
500 | Internal error |
/cdn/stream/access_list/remove¶
Удалить ключи из списка контроля доступа к потоку
Request example¶
POST /rest-api/cdn/stream/access_list/remove HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"name":"test",
"keys":["key1"]
}
Response example¶
Return codes¶
Code | Reason |
---|---|
200 | OK |
400 | Bad request |
404 | Not found |
500 | Internal error |
/cdn/stream/access_list/delete¶
Очистить список контроля доступа к потоку
Request example¶
POST /rest-api/cdn/stream/access_list/delete HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"name":"test"
}
Response example¶
Return codes¶
Code | Reason |
---|---|
200 | OK |
400 | Bad request |
404 | Not found |
500 | Internal error |
/cdn/stream/access_list/print¶
Показать список контроля доступа к потоку
Request example¶
POST /rest-api/cdn/stream/access_list/print HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"name":"test"
}
Response example¶
Return codes¶
Code | Reason |
---|---|
200 | OK |
400 | Bad request |
404 | Not found |
500 | Internal error |
Параметры¶
Параметр | Описание | Пример |
---|---|---|
name | Имя потока в CDN |
test
|
keys | Список ключей доступа к потоку |
["key1","key2","key3"]
|
Доступ к потоку со стороны подписчика¶
Передача ключа доступа при помощи WebSDK для воспроизведения по WebRTC¶
Для воспроизведения потока по WebRTC необходимо передать ключ доступа к нему как дополнительный параметр в функцию createSession
Flashphoner.createSession({urlServer: "wss://test.flashphoner.com:8443", custom: {aclAuth: "key1"}}).on(SESSION_STATUS.ESTABLISHED, function(session){
...
});
Имя параметра должно соответствовать заданному в настройке, в данном случае aclAuth
Передача ключа доступа в параметрах соединения при воспроизведении по RTMP¶
Для воспроизведения потока в плеере по RTMP необходимо передать ключдоступа в параметрах соединения
Здесь
edge1.flashphoner.com
- имя сервераaclAuth
- имя параметра, как указано в настройкеtest
- имя потока
Передача ключа доступа в параметрах потока при воспроизведении по RTMP¶
Для передачи ключа доступа в параметрах потока необходимо установить следующий параметр в файле flashphoner.properties на всех Edge серверах CDN
В этом случае ключ может быть передан следующим образом
Передача ключа доступа при воспроизведении по HLS¶
Для воспроизведения потока по HLS необходимо передать ключ доступа в URL потока
Здесь
edge1.flashphoner.com
- имя сервераaclAuth
- имя параметра, как указано в настройкеtest
- имя потока
Если используется HLS ABR, ключ доступа необходимо передать при запросе основного плейлиста
При этом ключ доступа будет прописан в основной плейлист для каждого из вариантов
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=1280x720,CODECS="avc1.42e01f,mp4a.40.2"
../test-720p/test-720p.m3u8?aclAuth=key1
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=852x480,CODECS="avc1.42e01f,mp4a.40.2"
../test-480p/test-480p.m3u8?aclAuth=key1
#EXT-X-STREAM-INF:BANDWIDTH=400000,RESOLUTION=426x240,CODECS="avc1.42e01f,mp4a.40.2"
../test-240p/test-240p.m3u8?aclAuth=key1
Передача ключа доступа при воспроизведении по RTSP¶
Начиная со сборки 5.2.1008, для воспроизведения потока по RTSP необходимо передать ключ доступа в URL потока
Здесь
edge1.flashphoner.com
- имя сервераaclAuth
- имя параметра, как указано в настройкеtest
- имя потока
Отметим, что некоторые плееры, например, VLC, передают ключ в верхнем регистре. Для того, чтобы поток проигрывался в таких плеерах, необходимо указать настройку
Передача ключа доступа при помощи Android SDK для воспроизведения по WebRTC¶
Для воспроизведения потока по WebRTC в Android-приложении необходимо передать ключ доступа к нему в метод Connection.setCustom
при установке соединения
private Session session;
private Connection connection;
...
connection = new Connection();
connection.setCustom("aclAuth", "key1");
session.connect(connection);
Имя параметра должно соответствовать заданному в настройке, в данном случае aclAuth
Обратная совместимость¶
CDN 2.2 обратно совместима с CDN 2.0 и 2.1, при этом могут воспроизводиться только потоки с чистыми ACL (вновь опубликованные).
Ограничения¶
-
Не рекомендуется публиковать поток с одним и тем же именем на двух Origin серверах одной CDN.
-
Поток, опубликованный на одном из Origin серверов, следует забирать с этого же Origin или Edge сервера (в том числе через Transcoder сервер), но не с другого Origin сервера в той же CDN.
-
ACL могут быть назначены потоку только на том же Origin сервере, где этот поток опубликован.