Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

понедельник, 24 октября 2011 г.

Flash Media Server. Запись потока.

Возникла у меня идея - сохранять трансляции на стороне сервера, так, чтобы при каждой публикации потока создавался новый файл с unix timestamp в имени. И важно чтобы имя потока не менялось, оно прописано в клиенте трансляции. Я как человек практически незнакомый с actionscript, flex, fms и тд, полез в документацию по серверному as и не обнаружил никаких способов получить текущее время на стороне сервера. Допускаю, что такие методы таки есть ...
Но до лучших времен пришлось писать вот такого динозавра с запросом к клиентской части:

клиент app.mxml
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"    
layout="absolute" creationComplete="init()"> 
<mx:Script>

...

private function init():void
{ 
      // Объект подключения к серверу
      nc = new NetConnection();
      // Клиент - текущий объект приложения
      nc.client = this;

      ...
}

// метод приложения возвращающий timestamp
public function getCurTime():Number
{
      var now:Date = new Date();
      return now.time;
}

...


сервер main.asc
// Разрешаем отладку
// Отладку смотрим в логах fms, ...logs/_defaultVHost_/webcast/_definst_/
application.allowDebug = true;

// Обработчик результата вызова метода клиента
TimeHandler = function()
{
    // Обработчик получения результата
    this.onResult = function(curTimestamp)
    {
        // Формируем имя файла потока
        file = "cast" + curTimestamp;
        trace('Attempt to save the file: ' + file);
        // Пишем поток
        // По-умолчанию все пишется в каталог streams/_definst_ приложения
        // Это можно изменить, создав файл Application.xml
        // и прописав там пути в определенных секциях
        stream = Stream.get(file);
        stream.play("webcast");
        stream.record();
    }
 
    this.onStatus = function(info)
    { 
        trace("Failed with code:" + info.code); 
    } 
};

// Обработчик события публикации потока
application.onPublish = function (clientObj, streamObj)
{
    // Вызываем клиентский метод, передаем обработчик, как параметр
    // обязательно должен быть метод свойства NetConnection.client
    clientObj.call("getCurTime", new TimeHandler());
};

Витиевато одним словом получилось, кто-бы подсказал способ попроще, был бы рад ;-)

Комментариев нет:

Отправить комментарий