maxlapshin
erlyvideo продавец Я начал искать продавца консультанта, который будет помогать нам продавать наше ПО. Нужно вести клиентов от первого контакта до покупки, помогать людям с внедрением ПО.
levgem.livejournal.com
писать мне на max@erlyvideo.org с темой «Вакансия продавца»
maxlapshin
erlyvideo гоняю бенчмарки RTMP и беда-беда: клиент раз в 6 медленнее сервера. Как-то надо запилить мегапримитивный клиент, но пока не очень понятно как
maxlapshin
erlyvideo Erlang выпустили мы таки 4-ю версию flussonic (то, что раньше было эрливидео). Теперь даже домохозяйка может настроить стриминг, потому что есть веб-интерфейс для конфигурации, статистики и даже заливки файлов.
yzh44yzh
erlyvideo Касательно записи аудио-видео средствами Erlyvideo. Этот сервер более строгий, чем другие медиа сервера, и более сурово относится к клиентскому коду. Например, если вы напишите такой код:
netStream.close();
netStream.attachAudio(null);
то получите ошибку на сервере и дисконнект клиента. Сервер не терпит вольностей со стороны клиента, и по любому поводу готов наказать его дисконнектом :) Поэтому, не удивляйтесь, когда запустив флэш-клиента, прекрасно работающего с любым другим медиа-сервером, увидите, как erlyvideo оплевывает вас исключениями :)

Далее, вы не можете в одном NetStream делать и publish и play. Такое не катит:
netStream.publish("some.flv", "record");
// some time passed
netStream.close();
netStream.play("some.flv");

Нужно, во-первых, публиковать так
netStream.publish("some.flv?clients_timeout=0", "record");
а для проигрывания использовать другой стрим
netStream.close();
netStream2.play("some.flv");

По дефолту записываемый файл не сразу пишется на диск, а сперва кешируется в памяти, и не доступен для проигрывания. client_timeout отключает это кеширование.

Ну и до кучи: повторно писать в файл с тем же именем нельзя, поэтому так:
nextId++;
var name : String = streamName + nextId + ".flv?clients_timeout=0";
streamPublish.publish(name, "record");

Ну вот так можно реализовать запись аудиоподкаста :)
yzh44yzh
erlyvideo Erlang надо запомнить, как erlang из сорцов собирается. А то erlyvideo постоянно требует самого свежего эрланга, который есть только в сорцах

apt-get install ncurses-dev
apt-get install openssl libcurl4-openssl-dev

download erlang.org
untar
configure --with-ssl
make
make install
yzh44yzh
erlyvideo red5 Немного повозился с записью аудиоподкастов. Ну качество получается не ахти, оба доступных кодека при максимальных настройках rate/bandwidth выдают говнецо.

Хоть так:
mic.codec = SoundCodec.NELLYMOSER;
mic.rate = 44;

хоть эдак:
mic.codec = SoundCodec.SPEEX;
mic.setSilenceLevel(0);
mic.encodeQuality = 10;

Но если на erlyvideo получается просто говнецо, то на Red5 получается говно полное и неюзабельное. Например, запускаешь запись, считаешь от одного до десяти, останавливаешь, воспроизводишь, и в случае с Red5 получаешь:
несколько секунд тишины (NetStream.seek выдает 0), один-два-три-четыре-семь-восемь, стоп.
"пять-шесть" теряется, "девять-десять" теряется. В 10 случаях из 10 стабильный результат — тишина в начале, и выпадение данных в середине и в конце.

Тот же самый клиентский код с erlyvideo выдает совсем другой результат — слышишь ровно то, что записывал. Никакой тишины, никакой потери данных. Только звук корявый, глухой, с шумами. Но это уже вопрос к кодеку и к микрофону.
yzh44yzh
erlyvideo rtmp Flash amf Сделал себе интересную подлянку с registerClassAlias. Допустим, у нас есть типизированный объект Message, зарегистрированный этой функцией, так что сервер может отправлять объекты такого типа клиентам. Коннектятся два клиента. Один отправляет Message, сервер бродкастит его на всех, кто законнекчен. И один из клиентов (который отправлял) получает типизированный Message , а второй (который не отправлял) — нетипизированный Object, но с такими же полями.

То бишь, у второго клиента registerClassAlias не сработал. Если второй клиент теперь отправит сообщение, то дальше оба будут получать нормальный Message.

А все потому, что я сделал так:
public class Message
{
registerClassAlias("com.flashdevs.textChatLib.Message", Message);
...

А нужно было так:
registerClassAlias("com.flashdevs.textChatLib.Message", Message);
public class Message
{
...

и registerClassAlias у меня вызывался только при инстанциировании Message, а не раньше. (Причем вызывался многократно при каждом инстанциировании :)
yzh44yzh
erlyvideo Fedora Все ок, собралось, запустилось. Проблема была в том, что я сперва собрал Эрланг без поддержки ssl. Установил пакет openssl-static, пересобрал эрланг, и потом заработало
yzh44yzh
erlyvideo Debian Fedora Ну вот, дома, под debian, не имел никаких проблем. А на работе, под fedora, имеются ) Fedora твердно уверна, что erlang версии R13B04 достаточно свежий, и обновлять его нет надобности. А erlyvideo для сборки требует R14. Что ж, теперь придется собирать erlang из исходников )

В очередной раз убеждаюсь, что debian более тру, чем fedora. Надо набраться решимости, и на работе тож заменить.
yzh44yzh
erlyvideo VOD сервис тут кое в чем получше. Во-первых, присылает хренову тучу метадаты по flv файлу. Во-вторых, на последней секунде дергает метод onLastSecond. Приятная и полезная мелочь. (Правда у меня на клиенте нет такого метода и из-за этого выскакивает исключение, но это неважно :)
maxlapshin
erlyvideo Есть работа для студентов, которые хотят покомпилировать сырцы за деньги: надо сделать свежие эрланговые пакеты под дебианы, убунты и центос и собрать erlyvideo под центос. Стучаться ко мне: max@erlyvideo.org
yzh44yzh
erlyvideo red5 Немного статистики по объему кода:

red5: 518 классов, 86596 строк кода
erlyvideo: 199 файлов (erl и hrl), 40393 строк кода.

Они, конечно, не идентичны по возможностям. У erlyvideo возможности больше ) Но можно утверждать, что для реализации одинакового функционала на Erlang нужно в 2 раза меньше кода, чем на Java.
yzh44yzh
erlyvideo В текущем проекте будет много стриминга. Выбираем между CDN сетью на базе Wowza (у стороннего провайдера) и собственной сетью на базе Erlyvideo.

Сперва попробовали заюзать simplecdn.com А оно упало и лежало 72 часа :( Народ ищет что-нибудь другое, а я вожусь с Erlyvideo.

И скажу, что это весьма безпроблемный видео сервер. Установился и запустился с полпинка, стриминг сразу заработал. Я только потратил N минут, чтобы найти на форуме, как его запустить демоном. Тож просто — make start )

Ну и при сборке кроме очевидной зависимости от Erlang, есть неочевидная (и недокументированая) от Ruby, который используется где-то в недрах make.
maxlapshin
erlyvideo сейчас умеет делать плейлисты, привязанные к абсолютному времени (как телеэфир), скоро научится туда грамотно вставлять рекламу в разных видах.
kutu
erlyvideo если вам не чужды такие слова как FMS, Wowza, Red5, rtmp протокол, то рекомендую подписаться на @maxlapshin
Максим Лапшин сейчас разрабатывает RTMP сервер erlyvideo написанный на ерланге
оф. сайт erlyvideo.org
подробнее на русском здесь flasher.ru