Медиапоток, захваченный WCS, может быть записан при публикации.
Поддерживаемые протоколы:
Форматы записи:
1. Для теста используем демо-сервер demo.flashphoner.com и веб-приложение Stream Recording
https://demo.flashphoner.com/client2/examples/demo/streaming/stream_recording/recording.html
2. Нажмите кнопку "Start". Начнется захват и трансляция потока.
3. Нажмите кнопку "Stop". Трансляция остановится, отобразится ссылка на воспроизведение и скачивание записанного фрагмента
По умолчанию запись потоков включена на стороне WCS-сервера.
Для отключения в конфиг /usr/local/FlashphonerWebCallServer/conf/flashphoner.properties следует добавить
record_streams=false |
Настройка
record_flash_published_streams=true |
включает запись потоков, опубликованных при помощи Flash, RTMP-кодировщика или с другого RTMP-сервера.
Настройка
record_rtsp_streams=true |
включает запись потоков, захваченных с RTSP IP-камер.
Настройка stream_record_policy определяет способ формирования имени файла записи потока. Например,
stream_record_policy=streamName |
означает, что имя файла будет соответствовать имени потока. Поток, опубликованный при помощи ffmpeg
ffmpeg -re -i BigBuckBunny.mp4 -preset ultrafast -acodec aac -vcodec h264 -strict -2 -f flv rtmp://test1.flashphoner.com:1935/live/stream_ffmpeg |
будет записан в файл stream_ffmpeg.mp4.
По умолчанию, имя файла формируется по шаблону
stream_record_policy=template |
В свою очередь, шаблон задается настройкой stream_record_policy_template. По умолчанию
stream_record_policy_template=stream-{mediaSessionId}-{login} |
Доступны следующие элементы шаблона:
Элеменнт | Описание | Максимальный размер |
---|---|---|
{streamName} | Имя потока | |
{startTime} | Время начала записи | 20 символов |
{sessionId} | Идентификатор сессии в кодировке BASE64 | 60 символов |
{mediaSessionId} | Идентификатор медиасессии | 36 символов |
{login} | Логин | 32 символа |
{audioCodec} | Аудиокодек | 4 символа |
{videoCodec} | Видеокодек | 4 символа |
Если имя файла создается из имени потока, в нем могут быть символы, недопустимые к использованию в именах, например, прямой слэш '/'. В этом случае имя файла должно быть закодировано при помощи настройки
encode_record_name=true,HEX |
При этом имя файла будет закодировано шестнадцатиричным числом. Настройка
encode_record_name=true,BASE64 |
кодирует имя файла при помощи BASE64.
Другой способ экранирования недопустимых символов - их удаление при помощи параметра exclude_record_name_characters. По умолчанию
exclude_record_name_characters=/ |
Например, для исключения двоеточия, запятой, точки и слэша необходимо указать
exclude_record_name_characters=:.,/ |
Потоки могут записываться частями заданной длительности при помощи параметра record_rotation. Например, настройка
record_rotation=20 |
определяет длительность фрагмента в 20 секунд.
Настройка on_record_hook_script указывает на shell-скрипт в директории /usr/local/FlashphonerWebCallServer/bin, который вызывается по завершении записи потока.
По умолчанию:
on_record_hook_script=on_record_hook.sh |
Этот скрипт можно использовать для копирования или перемещения записи потока из директории WCS_HOME/records в другое место по завершении записи.
Пример:
STREAM_NAME=$1 SRC_FILE=$2 SRC_DIR="/usr/local/FlashphonerWebCallServer/records/" REPLACE_STR="/var/www/html/stream_records/$STREAM_NAME-" DST_FILE="${SRC_FILE/$SRC_DIR/$REPLACE_STR}" cp $SRC_FILE $DST_FILE |
Здесь
При включении записи потоков на сервере, будет ли записан поток, или нет, зависит от значения параметра record, переданного функции createStream в скрипте публикующего клиента:
Например, в скрипте веб-приложения Stream Recording recording.html, recording.js, содержится следующий код:
function publishStream(session) { var streamName = $('#url').val().split('/')[3]; session.createStream({ name: streamName, display: localVideo, record: true, receiveVideo: false, receiveAudio: false ... }).publish(); } |
В некоторых случаях, необходимо записать поток, который уже транслируется сервером, например, выходной поток микшера. Это можно сделать при помощи REST API.
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
Здесь:
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | |
---|---|---|---|---|---|
/stream/startRecording |
| 404 - Not found 500 - Internal error | Начать запись потока в указанной медиасессии | ||
/stream/stopRecording |
| 404 - Not found 500 - Internal error | Завершить запись потока в указанной медиасессии |
Имя параметра | Описание | Пример |
---|---|---|
mediaSessionId | Идентификатор сессии | 5a072377-73c1-4caf-abd3 |
1. Максимальная длина имени файла во всех актуальных файловых системах Linux ограничена 255 символами. При создании файла записи, имя будет сокращено до данного предела, включая расширение и номер части, если включена ротация.
2. При записи потоков, опубликованных в конференции, ротация будет автоматически отключена, в противном случае полученные файлы будет невозможно объединить.