Документация на Flussonic Media Server

Часто возникает вопрос, какие именно параметры передает Flussonic Media Server к бэкенду авторизации.

Сами параметры описаны в статье про авторизацию.

Но как увидеть конкретные значения?

Конечно, это зависит от используемой технологии. Так как мы не можем описать все возможные языки программирования и операционные системы, в этой статье скрипт авторизации будет написан на языке PHP, а выполняться на операционной системе Ubuntu с помощью встроенного в PHP веб-сервера.

Установка PHP со встроенным веб-сервером Anchor Anchor x2

Встроенный веб-сервер не предназначен для работы в продакшене и может использоваться только для тестовых целей. Если вам нужно использовать этот скрипт не в тестовых целях, необходимо установить и настроить nginx, apache, fpm и т.п. Это сложно и долго, поэтому здесь этого процесса не описано.

Как сказано в документации PHP, встроенный веб-сервер доступен только начиная с версии 5.4.0.

К сожалению, такой новой версии может не оказаться среди доступных пакетов. В качестве примера, покажу как можно установить последний PHP на Ubuntu с помощью PPA. Нужно выполнить в командной строке следующие команды:

sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:ondrej/php5-5.6
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install php5

Внимание если вы не доверяете репозиторию "ppa:ondrej/php5", то вам придется найти какой-то другой способ установить свежий PHP в свою систему. Мы (Эрливидео) не несем никакой ответственности за содержимое этого PPA.

Дальше нужно проверить, что PHP действительно установился.

В командной строке выполняем команду php -v.

Пример правильного вывода:

PHP 5.5.16-1+deb.sury.org~trusty+1 (cli) (built: Aug 25 2014 10:24:59)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

Скрипт авторизации Anchor Anchor x2

Сохраните этот скрипт в любое удобное место на жестком диске. Например, если пользователь, которого вы используете, называется flussonic, то можно сделать директорию /home/flussonic/phproot и положить туда файл с именем /home/flussonic/phproot/notify.php.

В начале скрипта нужно отредактировать две настройки, LOG_FILE (сюда будет писать результат) и AUTH_DURATION (как часто Flussonic Media Server будет обращаться к бэкенду с новыми запросами).

<?php

/* ========== SETTINGS ========== */
$LOG_FILE = '/tmp/notify.log';
$AUTH_DURATION = '5';
/* ============================== */

function array_read($array, $seperator = ', ', $ending = ' and '){
      $opt = count($array);
      return $opt > 1 ? implode($seperator,array_slice($array,0,$opt-1)).$ending.end($array) : $array[0];
}

function logme($tolog) {
    global $LOG_FILE;
    $file = $LOG_FILE;
    // Write the contents to the file,
    // using the FILE_APPEND flag to append the content to the end of the file
    // and the LOCK_EX flag to prevent anyone else writing to the file at the same time
    file_put_contents($file, $tolog, FILE_APPEND | LOCK_EX);
}

function logmeln($tolog) {
    logme($tolog."\n");
}

function detectRequestBody() {
    $rawInput = fopen('php://input', 'r');
    $tempStream = fopen('php://temp', 'r+');
    stream_copy_to_stream($rawInput, $tempStream);
    rewind($tempStream);

    return $tempStream;
}

function getRequestBody() {
    return file_get_contents('php://input');
}

function logRequest() {
    global $AUTH_DURATION;

    logmeln("===============");
    logmeln("BEGIN LOG");
    logmeln("===============");
    logmeln("query_string");
    logmeln(@$_SERVER['QUERY_STRING']);
    logmeln("user agent");
    logmeln(@$_SERVER['HTTP_USER_AGENT']);
    logmeln("POST");
    logmeln(print_r($_POST, true));
    logmeln("GET");
    logmeln(print_r($_GET, true));
    logmeln("SERVER");
    logmeln(print_r($_SERVER, true));
    logmeln("REQUEST BODY");
    logmeln(print_r(getRequestBody(), true));
    logmeln("===============");
    logmeln("END LOG");
    logmeln("===============");

    header("Status: 200");
    header("HTTP/1.0 200 OK");
    header("X-AuthDuration: ".$AUTH_DURATION);
}

logRequest();

?>

Запуск встроенного веб-сервера Anchor Anchor x2

Допустим, вы сохранили скрипт в файл /home/flussonic/phproot/notify.php

Тогда нужно в командной строке выполнить следующее:

cd /home/flussonic/phproot
php -S localhost:8000

При нормальном запуске сервер должен ответить:

PHP 5.5.16-1+deb.sury.org~trusty+1 Development Server started at Thu Sep 25 20:55:15 2014
Listening on http://localhost:8000
Document root is /home/flussonic/phproot
Press Ctrl-C to quit.

Теперь все запросы к URL http://localhost:8000/notify.php будут логироваться в файл /tmp/notify.log.

Включение авторизации во Flussonic Media Server Anchor Anchor x2

Добавьте в файл конфигурации ваш статический поток, указав в качестве аргумента директивы auth url, который обслуживается встроенным сервером (http://localhost:8000/notify.php).

stream myvideo {
  url tshttp://videoserver/videostream;
  auth http://localhost:8000/notify.php;
}

Примените изменение файла конфигурации /etc/init.d/flussonic reload.

Проверка результатов Anchor Anchor x2

Войдите в веб-интерфейс Flussonic Media Server и попробуйте посмотреть видео прямо из веб-интерфейса.

В это время в соответствующем файле (например, в /tmp/notify.log) должны начать появляться новые записи с информацией о запросах.

Появление новых записей удобно наблюдать в консоли с помощью команды tail: tail -f /tmp/notify.log.