Table of Contents |
---|
Описание
Медиапоток, захваченный WCS, может быть записан при публикации.
Поддерживаемые протоколы:
- WebRTC
- RTMP
- RTSP
Форматы записи:
- MP4 для кодеков H.264 + AAC
- WebM для кодека VP8 + Vorbis
Краткое руководство по тестированию
Запись трансляции
1. Для теста используем демо-сервер demo.flashphoner.com и веб-приложение Stream Recording
https://demo.flashphoner.com/client2/examples/demo/streaming/stream_recording/recording.html
...
3. Нажмите кнопку "Stop". Трансляция остановится, отобразится ссылка на воспроизведение и скачивание записанного фрагмента
...
Серверная часть
Включение и отключение записи потоков
По умолчанию запись потоков включена на стороне WCS-сервера.
Для отключения в конфиг /usr/local/FlashphonerWebCallServer/conf/flashphoner.properties следует добавить
Code Block | ||||
---|---|---|---|---|
| ||||
record_streams=false |
Настройка
Code Block | ||||
---|---|---|---|---|
| ||||
record_flash_published_streams=true |
включает запись потоков, опубликованных при помощи Flash, RTMP-кодировщика или с другого RTMP-сервера.
Настройка
Code Block | ||||
---|---|---|---|---|
| ||||
record_rtsp_streams=true |
включает запись потоков, захваченных с RTSP IP-камер.
Формирование имени файла записи потока
Настройка stream_record_policy определяет способ формирования имени файла записи потока. Например,
Code Block | ||||
---|---|---|---|---|
| ||||
stream_record_policy=streamName |
означает, что имя файла будет соответствовать имени потока. Поток, опубликованный при помощи ffmpeg
Code Block | ||||
---|---|---|---|---|
| ||||
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.
По умолчанию, имя файла формируется по шаблону
Code Block | ||||
---|---|---|---|---|
| ||||
stream_record_policy=template |
В свою очередь, шаблон задается настройкой stream_record_policy_template. По умолчанию
Code Block | ||||
---|---|---|---|---|
| ||||
stream_record_policy_template=stream-{mediaSessionId}-{login} |
Доступны следующие элементы шаблона:
...
Если имя файла создается из имени потока, в нем могут быть символы, недопустимые к использованию в именах, например, прямой слэш '/'. В этом случае имя файла должно быть закодировано при помощи настройки
Code Block | ||||
---|---|---|---|---|
| ||||
encode_record_name=true,HEX |
При этом имя файла будет закодировано шестнадцатиричным числом. Настройка
Code Block | ||||
---|---|---|---|---|
| ||||
encode_record_name=true,BASE64 |
кодирует имя файла при помощи BASE64.
Другой способ экранирования недопустимых символов - их удаление при помощи параметра exclude_record_name_characters. По умолчанию
Code Block | ||||
---|---|---|---|---|
| ||||
exclude_record_name_characters=/ |
Например, для исключения двоеточия, запятой, точки и слэша необходимо указать
Code Block | ||||
---|---|---|---|---|
| ||||
exclude_record_name_characters=:.,/ |
Ротация файлов записей
Потоки могут записываться частями заданной длительности при помощи параметра record_rotation. Например, настройка
Code Block | ||||
---|---|---|---|---|
| ||||
record_rotation=20 |
определяет длительность фрагмента в 20 секунд.
Скрипт обработки записанных файлов
Настройка on_record_hook_script указывает на shell-скрипт, который вызывается по завершении записи потока.
По умолчанию скрипт располагается в каталоге /usr/local/FlashphonerWebCallServer/bin:
Code Block | ||||
---|---|---|---|---|
| ||||
on_record_hook_script=/usr/local/FlashphonerWebCallServer/bin/on_record_hook.sh |
но может быть размещен в любом другом месте под другим именем, например:
Code Block | ||||
---|---|---|---|---|
| ||||
on_record_hook_script=/opt/on_record.sh |
Этот скрипт можно использовать для копирования или перемещения записи потока из директории WCS_HOME/records в другое место по завершении записи.
Пример:
Code Block | ||||
---|---|---|---|---|
| ||||
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 |
Здесь
- $1 - имя потока
- $2 - абсолютное имя файла записи потока
- по завершении записи потока файл записи копируется в директорию /var/www/html/stream_records/
Необходимо учитывать длину абсолютного имени файла (с учетом имени каталога), которое будет получено при копировании. Если абсолютное имя целевого файла превышает 255 символов, команда копирования завершится с ошибкой, и скрипт не сработает в соответствии с ожиданиями.
Настройка частоты дискретизации аудио при записи
По умолчанию, запись звука ведется с частотой дискретизации 44.1 кГц. При необходимости, это значение можно изменить при помощи параметра
Code Block | ||||
---|---|---|---|---|
| ||||
record_audio_codec_sample_rate=48000 |
В данном случае частота дискретизации будет установлена в 48 кГц.
Клиентская часть
При включении записи потоков на сервере, будет ли записан поток, или нет, зависит от значения параметра record, переданного функции createStream в скрипте публикующего клиента:
- true - поток, опубликованный с использованием этого клиента, будет записан;
- false - поток не будет записан.
Например, в скрипте веб-приложения Stream Recording recording.html, recording.js, содержится следующий код:
Code Block | ||||
---|---|---|---|---|
| ||||
function publishStream(session) {
var streamName = $('#url').val().split('/')[3];
session.createStream({
name: streamName,
display: localVideo,
record: true,
receiveVideo: false,
receiveAudio: false
...
}).publish();
} |
Запись потоков по требованию
В некоторых случаях, необходимо записать поток, который уже транслируется сервером, например, выходной поток микшера. Это можно сделать при помощи REST API. Обратите внимание, что только потоки в статусе "PUBLISHING" могут быть записаны.
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP: http://streaming.flashphoner.com:8081/rest-api/stream/startRecording
- HTTPS: https://streaming.flashphoner.com:8444/rest-api/stream/startRecording
Здесь:
- streaming.flashphoner.com - адрес WCS-сервера
- 8081 - стандартный REST / HTTP порт WCS-сервера
- 8444 - стандартный HTTPS порт
- rest-api - обязательный префикс
- /stream/startRecording - используемый REST-вызов
REST-методы и статусы ответа
...
REST-метод
...
Пример тела REST-запроса
...
Пример тела REST-ответа
...
Статусы ответа
...
Описание
/stream/startRecording
...
Code Block | ||||
---|---|---|---|---|
| ||||
{
"mediaSessionId": "5a072377-73c1-4caf-abd3"
} |
404 - Not found
500 - Internal error
Начать запись потока в указанной медиасессии
...
Code Block | ||||
---|---|---|---|---|
| ||||
{
"mediaSessionId": "5a072377-73c1-4caf-abd3"
} |
...
404 - Not found
500 - Internal error
...
Параметры
...
Имя параметра
...
Описание
...
Пример
...
mediaSessionId
...
Идентификатор сессии
...
5a072377-73c1-4caf-abd3
Известные проблемы
1. Максимальная длина имени файла во всех актуальных файловых системах Linux ограничена 255 символами. При создании файла записи, имя будет сокращено до данного предела, включая расширение и номер части, если включена ротация.
2. При записи потоков, опубликованных в конференции, ротация будет автоматически отключена, в противном случае полученные файлы будет невозможно объединить.
Include Page | ||||
---|---|---|---|---|
|