Использование Amazon IVS для создания частного канала для авторизованного воспроизведения прямых трансляций
9 февраля 2023 г.Здесь, в этом блоге, мы рассмотрели множество различных способов организации прямых трансляций с помощью Amazon Interactive Video Service (Amazon IVS), но все эти примеры до сих пор были сосредоточены на общедоступных каналах, которые может просматривать любой пользователь без каких-либо ограничений. авторизация воспроизведения, чтобы убедиться, что зрителю разрешено просматривать прямую трансляцию. Многие платформы потокового пользовательского контента (UGC) не требуют какой-либо авторизации для просмотра потока, но есть случаи использования, когда мы хотим ограничить наших зрителей потоком подмножества нашей аудитории. Например, возможно, наши создатели контента хотят взимать плату за подписку на контент, который они производят. Или, возможно, существуют лицензионные ограничения потокового контента, которые запрещают распространение в определенных демографических или географических регионах. Для случаев использования, когда платформа должна применять авторизацию воспроизведения, Amazon IVS поддерживает частные каналы. Эти каналы будут ограничивать воспроизведение зрителями, которые получили токен, подписанный с помощью закрытого ключа и проверенный с помощью открытого ключа. В этом посте мы рассмотрим, как включить авторизацию воспроизведения, создать пару ключей воспроизведения, сгенерировать токен и воспроизвести частный поток.
Создание частного канала
Первым шагом в этом рабочем процессе является создание частного канала. Создание частного канала очень похоже на создание общедоступного канала — единственное отличие состоит в единственной настройке при создании канала для включения авторизации воспроизведения. Мы можем включить авторизацию воспроизведения через консоль Amazon IVS, через интерфейс командной строки AWS или любой из AWS SDK.
Начнем с того, как создать частный канал с помощью консоли Amazon IVS. В списке каналов в консоли нажмите Создать канал.
На странице Создать канал введите название канала (№1), выберите Пользовательская конфигурация (№2) и включите параметр Включить авторизацию токена. требование для воспроизведения видео (#3).
Если вы предпочитаете использовать интерфейс командной строки для создания канала, вы можете добавить параметр --authorized
.
$ aws ivs create-channel --name demo-private-channel --latency-mode LOW --type STANDARD --authorized
На самом деле вы, вероятно, собираетесь использовать AWS SDK для создания каналов пользователей. В этом случае вы можете обратиться к документации AWS SDK для вашего любимого языка, чтобы определить соответствующий аргумент для установки авторизованного
воспроизведения. Например, вот документы для CreateChannelCommandInput
для AWS SDK для JavaScript v3, в котором указано, что мы можем установить логическое свойство authorized
при создании канала.
Теперь, когда мы включили авторизацию воспроизведения, если мы будем транслировать на канал и попытаемся просмотреть воспроизведение в реальном времени без создания и передачи токена воспроизведения, мы получим ошибку воспроизведения. Вот пример воспроизведения с использованием SDK проигрывателя Amazon IVS, где мы добавили прослушиватель ERROR
для захвата ошибок воспроизведения.
const streamUrl = '[private channel Playback Url]';
const ivsPlayer = IVSPlayer.create();
ivsPlayer.attachHTMLVideoElement(document.getElementById('video-player'));
ivsPlayer.load(streamUrl);
ivsPlayer.play();
ivsPlayer.addEventListener(IVSPlayer.PlayerEventType.ERROR, (err) => {
console.log(err);
});
Запуск этого в браузере при указании на частный канал приведет к следующей ошибке, зарегистрированной в консоли.
{
"type": "ErrorAuthorization",
"code": 7,
"source": "MasterPlaylist",
"message": "invalid_playback_auth_token"
}
Это подтверждает, что наш канал действительно частный, и для авторизации воспроизведения требуется создать токен
и передать его вместе с URL-адресом воспроизведения.
Создание ключа воспроизведения
Прежде чем мы сможем сгенерировать токен воспроизведения, нам потребуется создать пару закрытый/открытый ключ и загрузить ее в консоль Amazon IVS. Эта пара ключей будет использоваться для создания токена JWT
, подписанного с помощью закрытого ключа и проверенного с помощью открытого ключа для авторизации воспроизведения.
Чтобы управлять клавишами воспроизведения с помощью консоли Amazon IVS, выберите Клавиши воспроизведения на левой боковой панели навигации.
Мы можем либо создать ключ с помощью консоли, либо вручную с помощью OpenSSL в автономном режиме на нашем локальном компьютере. Создать пару ключей прямо в консоли. Для этого нажмите Создать ключ воспроизведения.
Дайте ключу имя и нажмите Создать.
Открытый ключ этой пары сохраняется в вашем аккаунте AWS и будет использоваться для проверки всех запросов на воспроизведение, содержащих токен, подписанный закрытым ключом. При использовании консоли Amazon IVS для создания пары ключей закрытый ключ немедленно загружается на ваш компьютер и не сохраняется в консоли и не доступен для дальнейшей загрузки.
Создание пары ключей в автономном режиме
Если вы предпочитаете создать собственную пару ключей, это можно сделать в автономном режиме, а затем импортировать открытый ключ в консоль Amazon IVS. Вот пример создания пары ключей с помощью OpenSSL.
$ openssl ecparam -name secp384r1 -genkey -noout -out demo-private-channel-private-key-1.pem
$ openssl ec -in demo-private-channel-private-key-1.pem -pubout -out demo-private-channel-public-key-1.pem
Чтобы импортировать открытый ключ, нажмите Импорт на странице со списком Ключ воспроизведения.
Назовите импортированный ключ и найдите файл открытого ключа (или вставьте содержимое файла открытого ключа).
Это также можно сделать через интерфейс командной строки AWS:
$ aws ivs
import-playback-key-pair
--name demo-private-channel-playback-key-1
--public-key-material "`cat /path/to/your/public-key.pem`"
Или с помощью AWS SDK (документы для примера JavaScript). ).
Воспроизведение частного канала
Теперь, когда мы создали закрытый канал и пару ключей воспроизведения, мы готовы создать подписанные токены авторизации воспроизведения. В вашем приложении ваша бизнес-логика будет определять, каким пользователям следует предоставить токен авторизации. Как упоминалось выше, возможно, логика вашего приложения сначала проверит, является ли пользователь действительным подписчиком на канал, запросив базу данных. Или, в случае географических ограничений, возможно, вам придется искать IP-адрес зрителя, чтобы убедиться, что он связан с регионом, который может просматривать поток. Точная реализация может отличаться, но как только вы определите, действительно ли зритель имеет право просматривать поток, вы можете приступить к методу создания токена, описанному ниже.
<цитата>Внимание! Генерация токенов зависит от языка, который вы используете в серверной части. Дополнительные сведения о требованиях см. в руководстве пользователя.< /p>
Чтобы сгенерировать токен с помощью Node.js, мы можем использовать библиотеку jsonwebtoken
(документы). Эта библиотека упростит процесс и позволит нам подписывать полезные данные с помощью алгоритма подписи SHA-384
в соответствии с требованиями Amazon IVS. Наша полезная нагрузка должна содержать Channel ARN, access-control-origin
, чтобы ограничить воспроизведение определенным доменом (или *
для всех доменов), и метка времени истечения срока действия токена. Чтобы подписать полезные данные, мы отформатируем их, как показано ниже, и воспользуемся закрытым ключом, который мы создали и импортировали выше.
Примечание. Токен используется для запуска воспроизведения на частном канале, поэтому срок действия относится только к времени между созданием токена и началом воспроизведения. Это не относится к количеству времени, в течение которого пользователь может воспроизводить данный поток. После авторизации воспроизведение может продолжаться до тех пор, пока пользователь не отключит соединение или не перезагрузит веб-страницу.
Вот один из способов создания токена на сервере (с помощью микросервиса или бессерверного приложения) с помощью Node.js.
import jwt from "jsonwebtoken";
const getToken = () => {
const privateChannelArn = process.env.DEMO_PRIVATE_CHANNEL_ARN; // private channel ARN
const privateChannelPrivateKey = process.env.DEMO_PRIVATE_CHANNEL_PRIVATE_KEY; // playback private key
const payload = {
"aws:channel-arn": privateChannelArn,
"aws:access-control-allow-origin": "*",
"exp": Date.now() + (60 * 1000), // expires in 1 minute
};
const token = jwt.sign(payload, privateChannelPrivateKey, { algorithm: 'ES384' });
return token;
}
В нашем внешнем интерфейсе мы можем получить токен из серверной части и добавить его к URL воспроизведения частного канала. В приведенном ниже примере я усек URL-адрес воспроизведения (streamUrl
) для краткости.
const streamUrl = `https://[truncated].m3u8?token=${token}`
const ivsPlayer = IVSPlayer.create();
ivsPlayer.attachHTMLVideoElement(document.getElementById('video-player'));
ivsPlayer.load(streamUrl);
ivsPlayer.play();
Обзор
В этом посте мы узнали, как создавать частные каналы, создавать и импортировать пары ключей воспроизведения и генерировать токен JWT для авторизации воспроизведения. Дополнительные сведения о частных каналах см. в руководстве пользователя.
Оригинал