Подкрепляйте 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. ОК. Это понятно, у Вас достаточно подробно это освящено. Я немного другое имел ввиду, прошу прощения если неясно выразился. Вот что я имел ввиду:
    Как альтернативу переключению с адобе 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. Добрый день. Ваши результаты мне безусловно интересуют. Если будет результат, обязательно делитесь. ;)))
      По поводу 50 пиров ничего не могу сказать.

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

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

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