FMS. Часть 1. Обзор.

Tags:

Краткий обзор

Flash Media Server -- это медиа-сервер, то есть, сервер, работающий с медиа-контентом. Основное его предназначение -- доставка медиа контента клиентам. Этой задаче посвящена львиная доля документации и львиная доля внимания Адоб. Однако кроме этого FMS умеет и многое другое, и он является довольно удобной платформой для создания многопользовательских приложений реального времени.

На сегодняшний день FMS распространяется как группа продуктов Adobe Flash Media Server family, включающая следующие версии:

  • Adobe Flash Media Interactive Server
  • Adobe Flash Media Streaming Server
  • Adobe Flash Media Development Server
  • Adobe Flash Media Encoding Server

Но как мы с вами понимаем, это просто маркетинговые ухищрения, а сервер-то один. Как водится, разные продукты получены путем отключения некоторой функциональности в основном сервере -- Interactive Server.

Interactive Server поддерживает:

  • Vod и Live сервисы (подробности ниже);
  • Встроенный язык ServerSide ActionScript (SSAS);
  • Хранение данных в SharedObject и в файлах;
  • Шифрование и кеширование данных;
  • Взаимодействие с другими FMS серверами;
  • Взаимодействие с Web и SOAP сервисами;
  • Расширяемость плагинами (которые можно писать на C++);
  • Масштабируемость (настраиваемая многопоточность на одной машине или кластеризация на нескольких машинах);

Сервер не поддерживает работу с базой данных. Вместо этого предлагается хранить данные в SharedObject (что можно рассматривать как объектную базу данных) и просто в файлах, либо пользоваться Web и SOAP сервисами.

В Streaming Server главной (и единственной) функцией остаются Vod и Live сервисы. Отключен SSAS, SharedObjects, взаимодействие с серверами и Web, SOAP сервисами. Кроме того, в этом варианте не обещается высокая производительность и масштабируемость :)

Development Server -- это бесплатная и свободно доступная версия для разработчика, полнофункциональная, но ограниченная 10 одновременными клиентскими подключениями.

Особняком стоит Encoding Server, у которого отдельная специфическая задача -- кодировать входящий видеопоток в разнообразные медиа-форматы и по всякому его обрабатывать.

Для работы с FMS клиент должен поддерживать протокол RTMP. Теоретически это может быть любое приложение, но реально клиентами являются флэш-приложения (swf-файлы, выполняемые по флэш плеере, среде AIR или в среде Flash Lite) либо другие FMS сервера.

Несколько FMS серверов можно объединить в сеть (и это называется Content Delivery Network), что позволяет доставлять медиа-контент большому числу клиентов.

RTMP

Real Time Messaging Protocol специально разработан для передачи больших объемов данных в реальном времени. В рамках одного соединения (NetConnection) могут быть созданы несколько потоков (NetStream), каждый из которых может передавать видео, аудио и любые бинарные данные. Кроме этого соединение позволяет клиенту вызывать методы на стороне сервера, и серверу вызывать методы на стороне клиента. Также через это соединение клиент может иметь доступ к ServerSide SharedObject.

Существует 5 вариантов RTMP:

  • RTMP -- стандартный протокол через порт 1935;
  • RTMPT -- HTTP туннелинг через порт 80;
  • RTMPS -- RTMP поверх SSL (Secure Sockets Layer), порт 443;
  • RTMPE -- Encrypted RTMP, порт 1935;
  • RTMPTE -- зашифрованный RTMP с HTTP туннелингом, порт 80;

Encrypted RTMP -- это упрощенное (по сравнению с SSL) шифрование. Оно более быстрое, не требует сертификата, использует 128-битный ключ.

Vod и Live сервисы

Во всех версия FMS доступны Vod и Live сервисы.

Vod сервис -- Video on Demand -- это простой видеохостинг. На сервере лежат медиа файлы и любой клиент может получить и воспроизвести их. Возможности такие же, как в http streaming (применяемом на YouTube и других веб-видео хостингах), но все гораздо проще для разработчика. На стороне сервера вообще ничего не нужно делать, кроме как положить файл в нужное место, а на стороне клиента нужно немного кода. И код этот, я уверен, хорошо известен любому флэшеру :) Ибо каждый флэшер обязательно писал свой видеоплеер :) А отличие rtmp streaming от http streaming небольшое.

Live сервис -- Live Publishing Point -- это гораздо более интересная штука, никаким веб-серверам недоступная. Суть в том, что клиент публикует видео (захваченное с веб-камеры или с профессионального оборудования, подключенного к компьютеру) а сервер транслирует это видео другим клиентам в реальном времени. Или сохраняет у себя в файл. Или и то и другое одновременно :)

Этот сервис также не требует никакого кода на стороне сервера, а требует немного кода в клиенте-публикаторе и клиентах-подписчиках. Впрочем, можно использовать готовые компоненты, или брать код из работающих примеров, идущих в комплекте с FMS.

Интересно уже и то, что клиент-публикатор может передавать не только видео и аудио, а любые бинарные данные. И все клиенты-подписчики могут их получать. Это позволяет делать многопользовательские приложения реального времени (игры), только с помощью Live сервиса, без серверного кода. И использовать для них Streaming сервер.

Между прочим Streaming сервер стоит $995, тогда как Interactive сервер стоит $4500, так что в этом есть практический смысл

Форматы видео и кодеки

Основной формат видео для FMS и флэш плеера -- это FLV.

Флэш плеер умеет кодировать и декодировать видео в этом формате с помощью кодека Sorenson Spark. Это относительно старый кодек, и он используется еще с 6й версии флэш плеера.

FLV видео может быть закодировано более новым и качественным кодеком On2 VP6. Флэш плеер умеет только декодировать такое видео, но не кодировать. Тут нужно использовать отдельное приложение -- Flash Media Encorder, которое тоже умеет публиковать видео на FMS, где оно может быть сохранено в FLV файл.

Помимо формата FLV, FMS сервер может публиковать, а флэш-плеер может воспроизводить видео высокого качества стандарта H.264 (MPEG-4 Part 10). Записать такое видео можно с помощью приложений Adobe Premiere и Adobe AfterEffects.

Для конвертации видео из разных форматов в FLV можно использовать известную консольную утилиту ffmpeg. И мы активно используем :)

Ну и кроме того, для всевозможных конвертаций в разные форматы можно использовать Adobe Flash Media Encoding Server, но он дорогой.

Shared Object

Server Side Shared Object -- довольно интересная вещь. Мы с вами хорошо знакомы с Shared Object, которые хранятся на клиентском компьютере. Очевидно из названия, что Server Side Shared Object хранятся на сервере :) И так же, как клиентские Shared Object они хранят данные в AMF формате.

AMF хоть и не тема сегодняшней беседы, но с ним есть один важный нюанс. Дело в том, что есть две версии этого формата. AMF0 использовался в AS2 и FMS2, AMF3 используется в AS3 и FMS3. Проблемы возникают, если флэш-приложение, написаное на AS3 пытается работать с FMS2. Тогда в коде клиентского приложения нужно явно включить AMF0.

Важной особенностью Server Side Shared Object является то, что к нему может быть подключено несколько клиентов, и все они могут одновременно читать и писать туда данные. При этом, когда один клиент что-то меняем в Shared Object, у всех остальных клиентов срабатывает событие синхронизации, и они получают измененные данные.

Так что с помощью Server Side Shared Object также можно реализовать многопользовательские приложения.

Еще можно отметить, что SharedObject могут быть временными (temporary) или постоянными (persistent). Первые существуют, пока серверное приложение работает (а оно работает пока есть клиентские соединения). Вторые хранятся постоянно.

Взаимодействие с внешним миром

Я уже говорил, что несколько FMS серверов могут взаимодействовать друг с другом. Здесь работает все тот же Live сервис, только один FMS сервис выступает как клиент и публикует видео и данные, а другой FMS сервис их получает и передает клиентам и/или следующему FMS серверу.

Но FMS сервер также может взаимодействовать и с веб-сервером, аналогично, как это делает флэш-клиент. Для этого есть более простые средства: XML и LoadVars классы, и более сложные средства: XMLSocket, WebService, SOAPCall классы.

Я пользовался только XML и LoadVars классами, про них и скажу про них пару слов.

XML класс имеет нечто общее с XML и XMLNode классами в AS1 и AS2. Он может загрузить с веб-сервера какой-либо XML документ. Парсится он также, как XMLNode в AS2. В запросе к веб-серверу можно передать GET-параметры, ну а POST передать нельзя.

LoadVars класс практически идентичен одноименному классу в AS1-AS2, и работать с ним нужно так же. На мой взгляд это менее удобно, чем XML, но зато позволяет передать POST параметры. А значит можно передать больше данных.

XMLSocket, WebService и SOAPCall я не использовал, так что смотрите документацию.

Альтернативы -- другие медиа сервера

FMS не единственный медиа-сервер, работающий по RTMP протоколу.

Несмотря на то, что протокол был закрыт (спецификацию открыли в начале этого года), он был изучен любопытными разработчиками, которые сделали альтернативный медиа-сервер Red5. Это бесплатный open source сервер, написанный на Java, популярный среди open source разработчиков. А позже на основе Red5 был написан коммерческий сервер Wowza.

С этими двумя серверами мы тоже работаем. Могу сказать, что Red5 заметно хуже по производительности, чем FMS. А Wowza достаточно хорош и является разумным компромиссом для тех, для кого FMS слишком дорог.

По функциональности они не намного уступают FMS, так что мы пишем клиентскую часть так, чтобы она одинаково работала с любым из этих трех серверов.

Не могу не упомянуть продукт горячо любимого всеми нами Николаса Каннассье -- HaxeVideo. Я сам не пробовал его. Но любители haXe, вероятно, заинтересуются :) Из документации видно, что он поддерживает аналоги Vod и Live сервисов.

Ну еще я слыхал о существовании RubyIZUMI. Но кроме факта существования и того факта, что он написан на Ruby мне больше ничего не известно :) Это просто говорит о том. что при желании вы сами можете написать свой медиа-сервер :)

Отдельно нужно сказать, что у Майкрософт тоже есть свой медиа-сервер, работающий с Silverlight приложениями. Но тут, конечно, конкуренция не между медиа-серверами, а вообще между флэш и Silverlight (мне нравится транскрипция "сервелат") платформами.

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
question for bots )
Image CAPTCHA
Enter the characters shown in the image.