Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

Описание

Медиапоток, захваченный 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


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-{sessionId}-{mediaSessionId}

Если имя файла создается из имени потока, в нем могут быть символы, недопустимые к использованию в именах, например, прямой слэш '/'. В этом случае имя файла должно быть закодировано при помощи настройки

encode_record_name=true,HEX

При этом имя файла будет закодировано шестнадцатиричным числом. Настройка

encode_record_name=true,BASE64

кодирует имя файла при помощи BASE64.

Ротация файлов записей

Потоки могут записываться частями заданной длительности при помощи параметра 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

Здесь

  • $1 - имя потока
  • $2 - абсолютное имя файла записи потока
  • по завершении записи потока файл записи копируется в директорию /var/www/html/stream_records/

Клиентская часть

При включении записи потоков на сервере, будет ли записан поток, или нет, зависит от значения параметра record, переданного функции createStream в скрипте публикующего клиента:

  • true - поток, опубликованный с использованием этого клиента, будет записан;
  • false - поток не будет записан.

Например, в скрипте веб-приложения Stream Recording recording.htmlrecording.js, содержится следующий код:

function publishStream(session) {
    var streamName = $('#url').val().split('/')[3];
    session.createStream({
        name: streamName,
        display: localVideo,
        record: true,
        receiveVideo: false,
        receiveAudio: false
    ...
    }).publish();
}



  • No labels