Подкрепляйте p2p соединение в AS3 live-ом

Технология p2p от Adobe все больше набирает обороты. Мне посчастливилось поработать с ней при написании видео звонков для проекта vrublevku.ru.

Эйфория от того, что трафик между пользователями будет ходить напрямую прошла быстро. После нескольких неудачных соединений по p2p, пришлось искать решение проблемы. Альтернатива нашлась быстро — если не удалось соединится по p2p, то переключаем пользователя на live соединение. В итоге, за время тестирования обнаружилось, что больше половины пользователей соединяются по p2p. Остальные переключаются на live соединение.


Реализовать переключение помог шаблон проектирования «состояние». В примере были убраны методы, которые можно с легкостью реализовать самим.

Использование

Connections.asОсновной класс для управления состояниями.

IConnection.as
Интерфейс для состояний описывает необходимые метода, которые нужно реализовать в других классах.

PeerState.asСостояние для p2p подключения.

LiveState.as
Состояние для live подключения.

К сожалению перейти полностью на p2p технологию не удалось, но она позволила сэкономить большую часть трафика между пользователями.

UPD
Нашел статью от Adobe на данную тему — Best practices for real-time collaboration using Flash Media Server


Опубликовано

в

от

Метки:

Комментарии

16 комментариев на ««Подкрепляйте p2p соединение в AS3 live-ом»»

  1. Аватар пользователя Andy
    Andy

    Привет, я решаю сейчас схожую задачу с p2p. Хотел узнать, каким образом ты организовал оповещение клиентов об идентификаторе текущего клиента? Ведь чтобы подключиться к кому-то, надо явно указать его peerID.

    1. Аватар пользователя Kirill Marchenko
      Kirill Marchenko

      Доставка организована c использованием технологии COMET и сервера сообщения, например ActiveMQ или ejabberd.

  2. Аватар пользователя Andy
    Andy

    Понятно. В моем случае использование сторонних средств нежелательно, пока я ловлю «NetGroup.Neighbor.Connect», после чего отправляю сообщение клиенту с необходимыми данными, но хотелось бы найти более изящное решение.

    1. Аватар пользователя Kirill Marchenko
      Kirill Marchenko

      Мне кажется NetGroup использовать не безопасно, если вы хотите организовать общение только между двумя пользователями.

      Еще можно посмотреть в сторону SharedObject с методом getRemote(). Все экземпляры flash-плееров при изменении значения одного из параметров в SharedObject, получат событие change, тем самым синхронизируются.

  3. Аватар пользователя Andy
    Andy

    Собственно, я выбирал между sharedObject и NetGroup. В чем уязвимость последнего? Задача — реализовать видеочат для нескольких пользователей. Я еще мало знаком с технологией, возможно упустил что-то, поэтому буду рад услышать аргументы.

    1. Аватар пользователя Kirill Marchenko
      Kirill Marchenko

      Можно декомпилить вашу флешку и узнать как вы формируете название группы. Зная это, можно попробовать подключиться к ней и получать сообщения, которые отправляются в группе. То же касается и видео потока… Возможно я не прав.

  4. Аватар пользователя anton
    anton

    я новичок во флеше, не могли бы пояснить что значит «Подкреплять live-ом», столкнулся с проблемой что люди не подключаются из разных подсетей, и вот ломаю голову как это обойти

    1. Аватар пользователя Kirill Marchenko
      Kirill Marchenko

      К сожалению если админы запрещают UDP, то мы в пролете с p2p. Взамен можно организовать вещание через rtmp протокол. Материалов на эту тему много в интернете. Если кратко, то вы вещаете видео на rtmp://fms_server/live с именем канала «test», а у другого человека читаетет канал с именем «test» по rtmp://fms_server/live.

  5. Аватар пользователя anton
    anton

    у меня собственно проблема с выходом за пределы сети, то есть внутри сети, на разных компах, либо в разных вкладках браузера все работает отлично, как только прошу кого то зайти с другой сети то, никакой реакции не происходит, вроде бы подключается к группе и все прочее но обмена информацией не происходит, нашел только один рабочий пример в сети на сайте http://labs.adobe.com их пример реализации сети на примере видеочата, там айдишники сохраняются на серваке и напрямую конектяться, никакого обмена инфой у меня не вышло но хотя бы в логах было видно подключение пользователя, больше неодного примера в сети не нашел который бы работал в разных сетях, чем это может быть вызвано? все из-за UDP?

    1. Аватар пользователя Kirill Marchenko
      Kirill Marchenko

      Возможно из-за UDP. Посмотри в сторону DirectConnection между пирами. Я в основном с ними работал.

  6. Аватар пользователя Stepan
    Stepan

    «Альтернатива нашлась быстро — если не удалось соединится по p2p, то переключаем пользователя на live соединение. В итоге, за время тестирования обнаружилось, что больше половины пользователей соединяются по p2p. Остальные переключаются на live соединение.»

    как я понимаю проблема в том, что в некоторых сетях запрещен UDP трафик.
    Не пробовали в качестве альтернативы » live соединению» использовать p2p на базе RTMP , он то построен на TCP ?

    1. Аватар пользователя Kirill Marchenko
      Kirill Marchenko

      Добрый день, Степан. Вы все правильно понимаете. UDP трафик блокируется и не дает соединиться. RTMP работает отлично. У меня было сделано так, что если соединиться по RTMFP не получилось, то переключаемся на RTMP. Схема работает отлично.

  7. Аватар пользователя rebrovsv

    ОК. Это понятно, у Вас достаточно подробно это освящено. Я немного другое имел ввиду, прошу прощения если неясно выразился. Вот что я имел ввиду:
    Как альтернативу переключению с адобе p2p на живой поток с сервера сразу, можно попробовать сделать переключение на другой протокол пиринговой раздачи, но работающий на TCP, а не UDP . То есть не на LIVE rtmp сразу, а на другую пиринговую сеть, но работающую поверх TCP. Объективно она будет тупее, все-таки TCP медленнее. Но, по словам сторожил работает =) Ну и как последний вариант так же оставить уже живой поток, который у Вас реализован. Честно говоря, хороших решений для себя я пока не нашел. Вот тут есть небольшой список сервисов. Большинство из них на базе rtmp либо rtsp, а те поверх TCP
    http://www.scvi.net/stream/soft.htm
    сейчас пытаюсь прикрутить на centos 5.8 Trevbus, он строится на базе битТорентов раздает на базе протокола rtsp если не ошибаюсь. Посмотрю что получится. Если интересно, могу отписаться по результатам. Вообще конечно интересно попробовать BitTorrent Live streamer, как-то так вроде. Но он пока только под винду, мне бы хотелось организовать все на GNU софте.
    И еще вопрос
    тут написано, что свободная лицензия поддерживает только 50 пиров
    http://www.adobe.com/products/flash-media-server-family/buying-guide-comparison.html
    Где-то на просторах интернетов встретил людей, утверждающих что у них пиров было много больше 50
    Вы не смотрели, какое у Вас было одновременно количество подключившихся?
    Медиа занялся недавно, на самом деле больше для саморазвития. Потому прошу не бить если где-то ляпнул что-то не в «тему» =)

    1. Аватар пользователя Kirill Marchenko
      Kirill Marchenko

      Добрый день. Ваши результаты мне безусловно интересуют. Если будет результат, обязательно делитесь. ;)))
      По поводу 50 пиров ничего не могу сказать.

  8. Аватар пользователя rebrovsv

    Добрый день. На данный момент результаты такие. Сервисы поднял с горем пополам. Если интересно коротенько есть в блоге у меня blog.3d-pechat.com
    Сейчас бьюсь с такой проблемой. Клиенты (swarmplayer них) сидящие за НАТом не могут законектится. С прокси не пробовал. Видимо будет тоже самое. С какого перепуга лезут за НАТ с серыми адресами. Ну и соответственно не могут создать рабочий сокет… С таким сюрпризом я не встречался. Прочитал спецификацию, это типа фишка протокола зачем-то они ее специально замутили. Пока побороть не удалось. Думаю сделать ход конем. У них вроде вышел новый плеер, уже как плагин к браузеру. А это намного интереснее чем качать програмулину, как было ранее. Есть уже плагин на ослика и лису =) и вроде как на сафари. такой вот зоопарк. На файрфоксе поставил плагин, ставится быстро, удобно. Смотрел пример видео (пока не свое, увы =( ) с википедии. Они оказываются юзают сей протокол. Вроде ничего. На днях по возможности буду пытаться прикрутить плеер на веб, посмотрю что выйдет.

  9. Аватар пользователя rebrovsv

    вот собственно этот плеер на вики. Очень даже ничего
    http://commons.wikimedia.org/wiki/File:Play_fight_of_polar_bears_edit_1.avi.OGG

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *