Skip to main content

Red5, FMS -- мечты и реальность

Posted in

Red5, реальность

N дней назад имел удовольствие поближе познакомиться с Red5. Вообще мы давно с ним работаем, но не я лично. Все время я писал код под FMS, оставляя другому человеку удовольствие портировать этот код под Red5 и Wowza (все наши приложения прозрачно работают на любом из этих трех медиа-серверов).

Но вот однажды, благодаря моей лености и недальновидности, возникли трудности с этим портированием: оно нужно было очень срочно, а шло медленно. Так что я был вынужден принять в этом участие и хоть как-то помочь. Дело осложнялось тем, что у меня были весьма поверхностные знания о Red5, и я вообще не программирую на Java.

Но вот начал втыкать в документацию Red5. Раздел Migration Guide, описывающий переход с FMS на Red5, порадовал. У Red5 есть интересные фишки и преимущества перед FMS. А именно:

- Есть нормальная работа с любой базой данных. Этого нет на FMS;

- Есть взаимодействие с окружением ОС, вызов внешних команд. Этого нет на FMS;

- Богаче API для работы с Server Side SharedObject, в частности, можно перехватывать доступ с клиента к SharedObject и переопределять поведение. FMS не умеет контролировать такой доступ;

- ISchedulingService, ISchedulingJob выглядят по-серьезнее, чем setInterval;

- Есть AMF Remoting. То есть, с Red5 можно работать не только по RTMP, но и через этот remoting, как с BlazeDS;

К счастью, есть возможность создавать хендлеры для клиента динамически в рантайме (для разных клиентов разные хендлеры, в зависимости от прав юзера: guest, regular, moderator, admin). Этот прием я начал активно юзать на FMS, и хотелось бы сохранить его на Red5.

Но дальше с документацией по Red5 все печально. Она больше ориентирована на разработчиков, Red5 же и разрабатывающих, чем на пользователей. Там даже толком не описано, как его установить и запустить.

By the way, я сделал это так:

mkdir -p /opt/red5
cd /opt/red5
svn checkout http://red5.googlecode.com/svn/java/server/trunk/
make

То есть, он собирается из сорцов. Бинарный пакет, скачаный с http://www.red5.org/wiki/Releases, мне не удалось заставить работать.

Red5 собирается в папку /opt/red5/dist, где и нужно его запускать:

cd /opt/red5/dist
./red5.sh

Но про папку dist еще нужно догадаться, ибо в /opt/red5 тоже есть red5.sh, который запускается, но нифига не работает.

В общем, это как у меня получилось его установить и запустить. Ибо существуют стопицот разных способов это сделать, правда ни один не гарантирует, что у вас это получится :)

Сильно много помощи в портировании я оказать не смог, ибо оказалось (как ни странно), что я не смогу за 2-3 дня освоить Red5 и Java достаточно, чтобы эффективно работать. Так, написал кое-какой код, убедился, что он под Red5 работает, а потом переключился на архитектурный уровень. Писать код оставил другим.

В итоге убедился, что преимущества FMS -- низкий порог входа и легкий старт, к Red5 не относятся. Тем не менее, мне все равно нужно его осваивать, так что буду работать в этом направлении. Я слишком долго это откладывал.

Red5, мечты

В документации Red5 есть одна такая интересная вещь, как Scripting Implementations. Оказывается под него можно писать приложения на скриптовых языках: JavaScript, JRuby, Jython, Groovy, Beanshell. И это для нас очень интересно.

В идеале хорошо бы написать код на JavaScript, единый для FMS, Red5 и Wowza, который везде будет работать одинаково. Это решает проблемы портирования. В реальности такое маловероятно. Более вероятно, что будет 70-80% общего кода на JavaScript, + 30-20% специфичного кода под каждый сервер. Но и это очень хорошо. Гораздо лучше, чем писать код под FMS, а потом портировать его под Red5 и Wowza, как мы сейчас делаем.

Правда меня сильно смущает производительность. Red5 и с нативным Java-кодом значительно уступает FMS по производительности. Как же он будет работать с кодом на JavaScript?

Есть еще надежда на Groovy. Как известно, этот язык можно скомпилировать в Java-байткод, что решит проблему производительности. Вероятно будет не так сложно написать транслятор Groovy -> ServerSide ActionScript. Тем более, что достаточно транслировать не весь синтаксис Groovy, а только его подмножество, достаточное для логики FMS приложений.

В своих мечтах я пишу серверный код на Groovy, и он компилируется для Red5 и Wowza и транслируется для FMS, и везде работает одинаково :)

Ах да, еще команда Red5 работает над тем, чтобы серверные приложения можно было писать на ActionScript 3. Ну поглядим :)

FMS, реальность

Ну а с FMS у меня все хорошо :) Наработан код, наработаны архитектурные подходы и фишки. Вырисовывается некий фреймворк. Причем растет он сугубо из практических нужд, а не из красивых абстракций. И поэтому он не особо красив, но зато решает практические задачи.

Часть этого фреймовка -- система юнит-тестов. Она тоже не такая красивая, как FlexUnit4, но решает мои задачи, и даже поддерживает асинхронные тесты.

В каких-то моментах писать тесты обременительно, а в каких-то других гораздо обременительнее обходится без них. Я не дошел до такого фанатизма, чтобы покрывать тестами 100% кода (и не дойду, я практик, а не фанатик), но где-то 40-60% считаю удобным покрывать.

FMS, мечты

Разумеется, я горю желанием поделиться этими наработками с общественностью :) Но глядя на Red5, понимаю, что выкладывать это дело в том виде, в каком оно сейчас есть, нельзя. Нет никакой документации, никаких демок и примеров. Никто просто не поймет, как этим пользоваться. И порог входа больше похож на стену :)

Стало быть, нужен демо-проект, который можно скачать, запустить, и поглядеть, как там все работает. Нужна документация о том, как это скачать, запустить, и как это работает :) Разумеется, в проекте должен быть не только сервер, но и клиент.

Нужно ли говорить, что у меня нет времени этим заниматься? Нужно ли говорить, что время появится, если у меня будет горячее желание? (ибо я ж вот нашел время, чтобы написать этот пост в блоге).

Желание появится, если кто-нибудь скажет, что ему будет интересно это посмотреть и попробовать. Так что, интересно?

Your rating: None Average: 5 (2 votes)