Форум 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 18:38

ну а я пытаюсь щас сделать чтобы одно и то же приложение было и отправителем и слушателем....так нельзя?
farPeerID = callers.farID; для чего используется?

MikroAcse 25.02.2012 18:42

Используйте библиотеку Tom'а Krcha.
И там же есть примеры.

Silicium 25.02.2012 18:44

Цитата:

я пытаюсь щас сделать чтобы одно и то же приложение было и отправителем и слушателем....так нельзя?
Конечно можно, иначе смысла бы в этом не было. Для этого у вас должно существовать как-минимум два потока: один публикующий, другой принимающий. По ссылке, что я привел, все очень подробно разжеванно. Если скачаете исходник, то должно стать еще понятнее.
в краце:
создаете публикующий поток. В его клиенте должен быть определен тот самый метот onPeerConnect, из которого Вы создаете принимающий поток. Ему в конструктор передаете callers.farID, и тогда он начинает (по вызову метода .play(name)) "слушать" оппонента. Вот и все. Отправка идет через публикующий поток, приме - через принимающий.

Добавлено через 41 секунду
Цитата:

Используйте библиотеку Tom'а Krcha.
Она на нетгруппах. Тем более, человек хочет разобраться в механизме.

MikroAcse 25.02.2012 18:52

Цитата:

Она на нетгруппах.
Если бы на использовала NetGroup, то я бы ней не пользовался, потому что из-за NetGroup P2P стает очень медленным (пинг от 1 секунды).
А у меня пинг меньше 0.2 секунд.

ashIndie 25.02.2012 19:28

каким образом мне тогда сделать обмен этими ID?
помогите ктонибудь, как мне исправить код чтобы все получилось?....я уже просто целый день сижу и запутался в примерах совсем.....дайте аську, скайп или помогите исправить код....чтобы я наглядно увидел как надо было сделать....примеров достаточно....но под конец дня я уже ничего не понимаю....
очень прошу...))) знающему человеку пару минут потратить, а мне еще день копать....

Silicium 25.02.2012 19:46

Код выложи - посмотрим.

ashIndie 25.02.2012 19:56

Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.net.NetConnection;
        import flash.events.NetStatusEvent;
        import flash.net.NetStream;
        import flash.media.Microphone;
        import flash.media.Camera;
        import fl.video.*;
        import flash.media.Video;
        import flash.net.NetGroup;
        import flash.net.GroupSpecifier;
 
 
        public class Main extends MovieClip {
 
                private const CIRRUS_ADDRESS:String = "rtmfp://p2p.rtmfp.net";
                private const DEVELOPER_KEY:String = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";                       
                private var netConnection:NetConnection;
                private var myPeerID;
                private var farPeerID;
                //streams
                private var sendStream:NetStream;
                private var recvStream:NetStream;
                private var video:Video;
 
                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 {
                        switch (e.info.code) {
                                case "NetConnection.Connect.Success":
                                        trace(e.info.code);
                                        myPeerID = netConnection.nearID;
                                        initSendStream();
                                        break;
                        }
                }
 
                // для отправки потока данных пиру
                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();
                        }
                }
 
        }
 
}


Silicium 25.02.2012 20:17

Вызов метода initRecvStream должен быть тут sendStreamClient.onPeerConnect, и передавать ему в качестве параметра callers.farID. И вот тут recvStream = new NetStream(netConnection, farID); он и должен быть в конструкторе

ashIndie 25.02.2012 22:21

Цитата:

Вызов метода initRecvStream должен быть тут sendStreamClient.onPeerConnect, и передавать ему в качестве параметра callers.farID
не совсем понял...вот так?
Код AS3:

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

Цитата:

И вот тут recvStream = new NetStream(netConnection, farID); он и должен быть в конструкторе
как это написать в конструкторе, если нам еще не известен farID?

Silicium 25.02.2012 22:47

initRecvStream(farPeerID);
Вот farPeerID - это оно и есть.
А так, как Вы делали:
recvStream = new NetStream(netConnection, myPeerID);
Это Вы к себе же и подключались)


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

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