Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   RTMFP, обьясните по пальцам! (http://www.flasher.ru/forum/showthread.php?t=175847)

ashIndie 25.02.2012 17:52

RTMFP, обьясните по пальцам!
 
Здравствуйте. Пытаюсь разобраться с p2p соединением посредством RTMFP.
Естественно перед тем как спросить я не один час провел в гугле прежде чем написать на форум.
И так, что собственно сейчас пытаюсь сделать...
Флешка, в которой есть 2 окошка, в одном показывается видео с камеры пользователя, в другом с камеры подключенного пользователя, тоесть такой приватный как бы чат...
Что понял и сделал:
Получил код разработчика на сайте, создал NetConnection, подключился, создал sendStream, тобишь канал по которому собираюсь передавать видео и звук.
Ну и получил peerID. На этом все. Дальше я закопался в примерах и в конец запутался. Поэтому прошу помощи у вас, товарищи...

вот собственно код:
Код AS3:

package  {
 
        public class Main extends MovieClip {
 
                private const CIRRUS_ADDRESS:String = "rtmfp://p2p.rtmfp.net";
                private const DEVELOPER_KEY:String = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxx";                       
                private var netConnection:NetConnection;
                private var myPeerID;
                private var farPeerID;
                //streams
                private var sendStream:NetStream;
                private var recvStream:NetStream;
                private var video:Video;
 
                var netGroup:NetGroup;
                private const GROUP:String = "ashIndie";
 
                public function Main() {                       
                        netConnection = new NetConnection();                       
                        // Добавляем детектор (listener) для получаения информации о статусе соединения                       
                        netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler);                       
                        // Соединяемся со Cirrus                       
                        netConnection.connect(CIRRUS_ADDRESS, DEVELOPER_KEY);
                }
 
                function netConnectionHandler(e:NetStatusEvent):void {
                        if (e.info.code=="NetConnection.Connect.Success") {
                                trace(e.info.code);
                                myPeerID = netConnection.nearID;
                                initSendStream();
                        }
                }
 
                // для отправки потока данных пиру
                private function initSendStream() {
                        trace("initSendStream()");
                        sendStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS);
                        sendStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler);
                        sendStream.publish("media");
                        sendStream.attachAudio(Microphone.getMicrophone());
                        sendStream.attachCamera(Camera.getCamera());
 
                        var sendStreamClient:Object = new Object();
                        sendStreamClient.onPeerConnect = function(callers:NetStream):Boolean {
                                farPeerID = callers.farID;
                                trace("onPeerConnect "+farPeerID);
                                return true;
                        }
                        sendStream.client = sendStreamClient;
                }
 
                private function initRecvStream() {
                        trace("initRecvStream()");
                        trace("myPerrID = ", myPeerID);
                        recvStream = new NetStream(netConnection, myPeerID);
                        recvStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler);
                        recvStream.play("media");
 
                        video = new Video(320, 240);
                        video.attachNetStream(recvStream);
                        addChild(video);
 
                        recvStream.client = this;
                }
 
                function netStreamHandler(e:NetStatusEvent):void {
                        trace(e.info.code);
                        if (e.info.code=="NetStream.Publish.Start") {
                                initRecvStream();
                        }
                }
 
        }
 
}

для удобства чтения импорты убрал
Прошу помогите, на самом деле срочно нужно сделать...

Aquahawk 25.02.2012 17:58

http://labs.adobe.com/technologies/cirrus/samples/
Это превосходный пример на вашу тему. Там всё просто и понятно в исходниках. Сейчас у меня нет возможности поковыряться в вашем случае. И спрячьте ваш developer key. С одной стороны ничего страшного, но и ничего полезного тоже.

ashIndie 25.02.2012 18:07

Благодарю вас за пример, но к сожалению я его уже пытался копать и не разобрался.
Ключ разработчика спрятал, спасибо за замечание.
Ну может кто еще поможет....
initRecvStream() запускается, но событий с него не получается никаких....может я до конца не понимаю весь механизм обмена peerID или еще чего...
Нужен просто человек который сможет внятно обьяснить....можно по скайпу или аське, можно тут....
я как бы в as не дуб дубом, но просто с NetConnection как-то не доводилось работать....а тут узнал про него, и открываются такие перспективы если понять как он работает....
А вот этот пример мне нужно срочно сделать....
Спасибо большое всем кто ответит или что посоветует....

Добавлено спустя пару минут:
Рассматриваю вариант использования без netgroup, сначала хотя бы просто понять как обмениваться видеопотоками.
насчет этого я вас потом замучаю, хотя оооочень надеюсь что нет.

Silicium 25.02.2012 18:13

http://melnaron.net/development/peer...-chat-in-flash

ashIndie 25.02.2012 18:17

Silicium, спасибо. Видел эту статью, щас попробую изучить ее более детально. Но там обмен Peer ID идет через php&mySQL, это не совсем подходит, так как именно этот обмен без php хочется реализовать...а сам механизм непонятен.
Ну жду еще помощи.

Aquahawk 25.02.2012 18:17

Цитата:

без netgroup
А в чате один на один нетгруп и не нужен совсем. Это практически два разных механизма взаимодействия с нетгреппой и один на один.

ashIndie 25.02.2012 18:22

Aquahawk, каким образом тогда они находят друг друга?
правильно ли я указываю видео поток вот таким способом:
Код AS3:

video = new Video(320, 240);
                        video.attachNetStream(recvStream);
                        addChild(video);

вот этот код мне не понятен, он не срабатывает в принципе:
Код AS3:

var sendStreamClient:Object = new Object();
                        sendStreamClient.onPeerConnect = function(callers:NetStream):Boolean {
                                farPeerID = callers.farID;
                                trace("onPeerConnect "+farPeerID);
                                return true;
                        }
                        sendStream.client = sendStreamClient;

а этот не отправляет события никакие:
Код AS3:

recvStream = new NetStream(netConnection, myPeerID);
                        recvStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler);


Silicium 25.02.2012 18:25

Либо нетгруп, либо свой трекер.

ashIndie 25.02.2012 18:27

да я не против нетгруп, только не понимаю как это реализуется....

Silicium 25.02.2012 18:33

Цитата:

да я не против нетгруп
а я против - их использование требует разрешения использовать пиринговые сети.
Так Вы хотите узнать, как реализуется р2р посредством нетгрупп или без, я так и не пойму.

Цитата:

вот этот код мне не понятен, он не срабатывает в принципе:
Он выполняется, когда к Вашему публикующему потоку присоединяются слушаетли


Часовой пояс GMT +4, время: 23:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.