← All posts tagged red5

yzh44yzh
red5 Уверенный лидер по числу багопроблем. Большинство тасков по суппорту текущей версии flashcoms связаны с Red5. То там чего-то не работает, то чего-то не сохраняется, то чего-то не удаляется.
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
red5 Это, не побоюсь этого слова, пиздец.

Имеем такой баг:
1) коннектся клиент A
2) коннектится клиент B
3) клиент B публикует видео, клиент A подписывается
4) клиент B закрывает браузер

на Red5 срабатывает
public void appDisconnect(IConnection conn)
, как и надо, но внезапно
String clientID = conn.getClient().getId();
возвращает клиента A

то бишь, Red5 даже не может разобраться, какой именно из двух юзеров дисконнектится. Ну жесть.

Ладно, попробуем обновить версию Red5, можно пофикшено. Обновляет сорцы, make, и оно не билдится ) Поправил код, сбилдилось, и не запускается )

ну полезу искать бинарный релиз, может он будет работать.

Чуваки НИКОГДА НЕ ЮЗАЙТЕ Red5 :)
yzh44yzh
red5 AMF сериализация на Red5 глючная, иногда теряет значения в полях объектов и пишет туда null

Есть три варианта выхода:
— баг репорт авторам и ждать
— пофиксить самим и распространять свою сборку red5
— отказаться от использования red5

мы выбираем 3й вариант )
yzh44yzh
red5 большая ошибка. Никогда его не юзайте.

Одно и то же red5 приложение на нескольких разных хостах. И везде — разные баги. На каждом хосте свои уникальные проблемы, которых нет на других хостах.

Надо ли говорить, что ничего не удается повторить локально (
yzh44yzh
red5 Вообще это хорошо, что есть Red5. Он выпрямляет кривые руки разработчикам, заставляет быть все время начеку, оптимизировать производительность и т.д. В итоге код получается лучше, и потом хорошо работает под Wowza :)
yzh44yzh
wowza red5 есть, допустим _items типа ConcurrentHashMap
_items.remove(id);
log.info("after removing item {} contains: {}", id, _items.contains(id));

на Red5
after removing item 1 contains: true
на Wowza
after removing item 1 contains: false

то бишь, на Red5 почему-то элемент не хочет удаляться из ConcurrentHashMap

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

Red5 загружает все эти приложения на старте, и если одно не запустилось, то все не запустятся. FMS и Wowza загружают приложения по требованию (при коннекте первого клиента). Ошибка в одном приложении никак не влияет на работу других.
yzh44yzh
wowza red5 Эх, хотело было мощно заюзать org.red5.server.net.rtmp.RTMPClient чтобы сделать бот-клиента, и с его помощью можно отлаживать функционал на сервере, дабы избежать для оной отладки запука 2-3 флэш клиентов и долгих кликаний по кнопкам в них в каждой фазе отладки.

Однако оный RTMPClient не стабильный, переодически не коннектится, а когда коннектится, не всегда нормально общается с сервером. То чего-то не пришлет, то чего-то не примет. Отладка легче не стало.

А жаль, ибо тут можно было бы мощные интеграционные тесты замутить.

Либо залезть в сорцы, разобраться и пофиксить. Либо сделать бот-клиента на флэше для тех же целей. Либо забить на все это и отлаживать многими кликами. Думаю.
yzh44yzh
erlyvideo red5 Немного статистики по объему кода:

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

Они, конечно, не идентичны по возможностям. У erlyvideo возможности больше ) Но можно утверждать, что для реализации одинакового функционала на Erlang нужно в 2 раза меньше кода, чем на Java.
yzh44yzh
red5 amf Юнит-тесты выявили баг в работе с reference tables для строк. У себя пофиксил. Послать им баг-репорт, что ли? С патчем.

Однако уже 2 часа ночи. Пора спать. Завтра пошлю )
yzh44yzh
red5 amf Red5 умеет сериализовать только java bean классы :(
BeanMap beanMap = new BeanMap(object);

Мысль о том, что amf сериализация будет привязана к java bean меня удручает. Нафига лишние зависимости?
К тому же у меня нифига не получается, вылезает java.lang.NoClassDefFoundError :)

Что ж, придется копаться в spicefactory, там это дело как-то похитрее сделано.
yzh44yzh
wowza red5 С логгингом на red5 разобрался. И разобрался, как его абстрагировать. Пришлось обернуть Red5LoggerFactory в еще один класс, и уже его передавать в red5-независимый модуль. Поскольку фабрика выдает логгеров типа org.slf4j.Logger, то оный модуль теперь может спокойно создавать себе логгеров.

Но вот теперь заморочка с Wowza. Вы уже догадались, что там тоже свой кастомный логгинг :) WMSLoggerFactory и WMSLogger :) И оный логгер является наследником org.apache.log4j.Logger.

И вот теперь мне надо думать, как бы свести к общему типу эти фабрики и логгеры, чтобы и из Red5 модуля и из Wowza модуля передать в red-wowza-независимый модуль какую-нибудь такую фабрику, что б там работала :)

Пока пытаюсь запустить в Wowza модуле org.slf4j.LoggerFactory и org.slf4j.Logger. Они вроде бы и работают, но в консоль выводят что-то загадочное и непонятное. Это потому, что у вовзы есть свой log4j.properties, весьма навороченый. И мне сейчас надо разобраться, как бы переопределить эти настройки в своем приложении.
yzh44yzh
red5 Дома на пустом проекте с логином получилось, хоть и не сразу. На работе никак не получалось, хотя вроде бы делал все тоже самое. Ну завтра продолжу.

Это только начало, ибо получилось через Red5LoggerFactory, а надо чтобы получилось без зависимостей от red5, ибо нужно чтобы оно и под wowza работало. (log4j не удалось заставить работать)

Вот не понимаю этого дикого энтузиазма с создании каких-то жутко проект-специфичных логингов. Ну чего б не использовать log4j ?
yzh44yzh
red5 Я, наверное, идиот, но никак не могу заставить работать логгинг. Эту хрень red5.org перечитал уже, наверное, раз 20. Вроде все так и сделал, но нет ни вывода в консоль, ни лог файл не появляется :(

Осталась одна надежда на examples, там в одном приложении логгинг есть и вроде даже работает.
yzh44yzh
red5 amf С сериализацией простых типов разобрался, тут исходники более-менее понятны моему скудному уму. Правда все размазано по нескольким классам и пакетам, но отследить можно.

С сериализацией объектов нифига не разобрался. По исходникам то же вроде бы не Rocket Science, но hex-редактор показывает кое-где какие-то непонятные байты, которые я не могу интерпретировать, ни по спеке, ни по исходникам.

К тому же типизированый объект почему-то записался как name1:name2:value1:value2, а не типизированый записался нормально name1:value1:name2:value2

Поищу еще какую-нибудь открытую реализацию. BlazeDS, хотя бы. Может там понятнее будет :)
yzh44yzh
wowza red5 FMS по мере тестирования одного и того же приложения на трех медиасерверах заметил:
— запуск сервера самый быстрый у wowza, медленне у red5, самый медленный у fms (правда это включая запуск админ-сервера)
— коннект приложения к wowza и red5 примерно одинаково быстрый, к fms чутка медленне, заметно на глаз