← Cloudflare Realtime / realtime / realtimekit / recording-guide
Создание пользовательского приложения для записи с использованием Recording SDK
Когда вы присоединяетесь ко встрече RealtimeKit, макет автоматически формируется так, чтобы обеспечить наилучшее взаимодействие: акцент делается на общем контенте, а активные спикеры выделяются, при этом остальные участники отображаются в виде небольших миниатюр. Когда вы начинаете запись встречи, она записывается с тем же макетом с помощью стандартного компонента UI Kit под названием RtkGrid ↗.
Если вы хотите настроить макет для своего приложения записи, собственные SDK записи RealtimeKit дают возможность гибко настраивать внешний вид записей по своему усмотрению. Доступны, например, следующие варианты:
- Показывать только активного спикера
- Демонстрация экрана с галереей миниатюр
- Демонстрация экрана с крупной миниатюрой активного спикера
- Демонстрация экрана без активного спикера и галереи
- Пользовательский фон для записи
- Портретная раскладка и так далее
Как работает рекордер
Когда вы вызываете Начать запись, RealtimeKit запускает контейнер Cloudflare, открывает в нём браузер Chrome и загружает URL-адрес приложения записи. Если вы не укажете собственный URL-адрес в url параметр, используется встроенное приложение записи RealtimeKit.
Параметры URL
Перед загрузкой вашего собственного приложения записи в браузере Chrome RealtimeKit добавляет authToken и config параметры запроса к URL. Например, если вы укажете этот URL в Начать запись API:
https://example.com/my-custom-recorderRealtimeKit загружает приложение со следующими параметрами:
https://example.com/my-custom-recorder?authToken=AUTH_TOKEN_CREATED_BY_REALTIMEKIT&config=CONFIG_CREATED_BY_REALTIMEKITЗначения-заполнители представляют параметры, предоставляемые RealtimeKit. Не добавляйте authToken или config самостоятельно к URL, переданному в Start Recording API. Ваше приложение должно считывать оба параметра из URL.
Токен авторизации
RealtimeKit создаёт authToken автоматически для встречи, запись которой вы запускаете. Этот токен создаётся с помощью recorder_preset_v2 preset. Если вы не создали recorder_preset_v2 preset, RealtimeKit использует глобальный preset с таким же именем, который управляется RealtimeKit и не отображается в вашем аккаунте.
Ваше собственное приложение для записи обязательно принять это authToken и использовать его для инициализации SDK RealtimeKit, чтобы получить meeting объект.
параметр Config
Любая конфигурация, которую вы указываете в Start Recording API, например настройки водяного знака, передаётся в приложение записи через config параметр запроса. Приложение записи по умолчанию автоматически считывает и применяет эту конфигурацию.
Если вы используете собственное приложение для записи, вы несёте ответственность за считывание и применение config. Все, что ваше приложение выводит в браузере, записывается как есть. RealtimeKit не применяет к выводу пользовательского приложения записи никакой дополнительной компоновки, водяных знаков или другой обработки.
Флаги пресета записи
hidden_participant флаг управляет только видимостью рекордера. Если он включён, рекордер скрывается от остальных участников встречи.
is_recorder флаг обозначает участника как рекордер и обеспечивает корректную работу записи. Если вы создаёте собственный recorder_preset_v2 preset для настройки цветов или внешнего вида записи, необходимо сохранить is_recorder включено. Удаление is_recorder может привести к сбою записи. Удаление hidden_participant может привести к тому, что индикатор записи станет виден другим участникам.
Локальное тестирование
Локальное тестирование позволяет просматривать интерфейс приложения записи. Если открыть URL-адрес приложения записи напрямую на локальной машине, запись не начнётся.
Только для локального тестирования создайте любой пресет с hidden_participant: true, затем передайте токен авторизации, созданный с этим пресетом, в authToken параметр запроса при открытии URL локального приложения записи. Это позволяет увидеть внешний вид интерфейса рекордера. Не указывайте локальный тестовый токен в качестве authToken в URL, отправляемом в Start Recording API. При реальной записи RealtimeKit автоматически создаёт и передаёт токен записи.
Чтобы ускорить разработку, используйте Cloudflare Tunnel чтобы открыть доступ к вашему локальному приложению записи. Например, если ваше приложение работает на порте 1111, запустите Quick Tunnel с:
cloudflared tunnel --url http://localhost:1111Замените 1111 с портом, используемым вашим локальным приложением. cloudflared выводит публичный trycloudflare.com URL-адрес. Вы можете указать этот URL в качестве адреса собственного приложения для записи при запуске записи, чтобы контейнер Cloudflare мог загрузить ваше локальное приложение.
При локальном тестировании вы можете увидеть ошибку WebSocket в консоли браузера, потому что ваш браузер не может подключиться к localhost:8080. Во время локального тестирования эту ошибку можно игнорировать. Рекордер использует этот порт внутри хостингового контейнера Cloudflare, и именно через соединение WebSocket приложение записи сообщает контейнеру, что нужно записать отрисованную веб-страницу.
Примеры
См. примеры приложений на SDK записи ↗ примеры реализации, включая пример записи с водяным знаком ↗.
Справочник Recording SDK
Пользовательские SDK записи используются поверх UI Kit или Core SDK. @cloudflare/realtimekit-recording-sdk пакет ↗ предоставляет RealtimeKitRecording класс для управления функциональностью записи.
Конструктор
constructor(options)
Создает экземпляр RealtimeKitRecording в качестве класса.
Параметры конструктора
options (object): Объект options. Все параметры конструктора необязательны. Если вы не укажете какой-либо параметр, RealtimeKit использует значение по умолчанию.
| options (object) | Описание |
|---|---|
options.waitTimeMs (number) |
Время (в миллисекундах) ожидания после выхода всех пиров перед остановкой записи. Этот параметр применяется, когда autoStop установлен в true. |
options.autoStart (boolean) |
По умолчанию: true, поэтому запись начинается автоматически, когда init() вызывается. Установите для него значение false только если вы хотите вручную начать запись с помощью startRecording(). Если задано значение false, вы должны вызвать startRecording() в течение 2 минут после установления соединения WebSocket, иначе процесс записи завершится ошибкой. |
options.autoStop (boolean) |
По умолчанию: true, поэтому запись останавливается автоматически после того, как все участники покинут встречу. Установите значение false только если вы хотите вручную остановить запись с помощью stopRecording(). |
options.scanInterval (number) |
Интервал (в миллисекундах) между проверками автоматического выхода пира. |
options.devMode (boolean) |
Установите значение true, чтобы включить режим разработки, который включает логи и отключает некоторые функции. Также убедитесь, что это значение установлено в true и при локальном тестировании вашего recording-app. |
Методы
init(client: RealtimeKitClient)Инициализирует SDK, предоставляя RealtimeKitClient объект. Вызовите это после создания объекта встречи и до вызова meeting.joinRoom().
startRecording();В большинстве случаев оставьте autoStart имеет значение true (значение по умолчанию), чтобы запись начиналась автоматически. Чтобы запускать запись вручную, установите autoStart к false в параметрах конструктора перед вызовом этого метода.
stopRecording();Обычно вам не нужно вызывать этот метод, потому что autoStop по умолчанию равно true. Чтобы остановить запись вручную, задайте autoStop к false в параметрах конструктора перед вызовом этого метода.
cleanup();Выполняет задачи по очистке после выхода из встречи, например удаляет добавленные обработчики событий и закрывает WebSocket-соединения.
Создание пользовательского приложения для записи
Чтобы создать приложение для записи ваших встреч RealtimeKit, выполните следующие шаги.
Шаг 1: Установите SDK
npm i @cloudflare/realtimekit-recording-sdkШаг 2: Импортируйте RealtimeKitRecording объект
import { RealtimeKitRecording } from "@cloudflare/realtimekit-recording-sdk";Шаг 3: Создайте RealtimeKitRecording объект
const recordingSdk = new RealtimeKitRecording(options);Шаг 4: Инициализируйте SDK записи
Вызовите init после создания объекта meeting и перед joinRoom вызывается.
// Call this after you have initialized the RealtimeKit SDK and have the meeting object
await recordingSdk.init(meeting);(Необязательно) Шаг 5: запустите запись вручную
Чтобы запустить запись вручную, задайте autoStart к false в RealtimeKitRecording опции конструктора. Затем вызовите startRecording() после того как вы загрузили содержимое интерфейса и готовы начать запись.
await recordingSdk.startRecording();(Необязательно) Шаг 6: остановите запись вручную
Чтобы остановить запись вручную, задайте autoStop к false в RealtimeKitRecording опции конструктора. Затем вызовите stopRecording() когда будете готовы остановить запись.
await recordingSdk.stopRecording();Как только stopRecording вызывается, рекордер в вашем приложении для записи завершает работу через несколько секунд. После этого выполнить какие-либо дальнейшие действия в приложении для записи уже не получится.
Шаг 7: Разверните приложение записи
После создания приложения разверните его с помощью такой платформы, как Cloudflare Workers ↗. Обязательно запишите URL-адрес развернутого приложения: его нужно будет указать в API записи RealtimeKit.
Шаг 8: Укажите пользовательский URL
В Начало записи встречи API укажите собственный URL (полученный на предыдущем шаге), чтобы указать расположение вашего развёрнутого приложения. Не добавляйте authToken к этому URL. RealtimeKit добавляет сгенерированный authToken и config параметры при загрузке приложения.