Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   p2p видео чат (http://www.flasher.ru/forum/showthread.php?t=198304)

syegorius 23.04.2013 23:26

p2p видео чат
 
доброе время суток уважаемые форумчане!

на днях написал небольшое приложение на actionscript javascript, привожу его ниже:

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="0" height="0" creationComplete="init()">
        <mx:Script>
                <![CDATA[
                        import flash.external.ExternalInterface;
 
                        import mx.collections.ArrayCollection;
 
                        private const SERVER_ADDRESS:String = "rtmfp://p2p.rtmfp.net/850ecff774ce98e0c0c765f3-29ce3314ba14/";
                        private var nc:NetConnection;
                        private var ss:NetStream;
                        private var rs:NetStream;
                        private var myPeerID:String;
                        private var recvStreams:Object = new Object();
                        private var sendStreams:Object = new Object();
                        private var soundNewMsg:Class;
 
 
 
                        private function initConnection():void{
                                nc = new NetConnection();
                                nc.maxPeerConnections = 1000;
                                nc.addEventListener(NetStatusEvent.NET_STATUS, ncStatus);
                                nc.connect(SERVER_ADDRESS);
                        }
 
                        public function ncStatus(event:NetStatusEvent):void{
                                ExternalInterface.call("p2pError",event.info.code);
                                if(event.info.code == "NetConnection.Connect.Success"){
                                        myPeerID = nc.nearID;
                                        initSendStream();
                                        ExternalInterface.call("alert",nc.nearID);
                                }
                        }
 
                        private function initSendStream():void{
                                ss = new NetStream(nc, NetStream.DIRECT_CONNECTIONS);
                                ss.publish('chat');
                                var client:Object = new Object();
                                client.onPeerConnect = function(subscriber:NetStream):Boolean{
                                        if(!sendStreams[subscriber.farID])sendStreams[subscriber.farID] = subscriber;
                                        if(!recvStreams[subscriber.farID])initReceiveStream(subscriber.farID);
                                        return true;
                                }
                                ss.client = client;
                        }
 
                        private function initReceiveStream(peerID:String):void{
                                if(peerID){
                                        rs = new NetStream(nc,peerID);
                                        rs.play('chat');
                                        var client:Object = new Object();
                                        client.receiveSomeData = receiveSomeData;
                                        rs.client = client;
                                        var peer:Object = new Object();
                                        peer.stream = rs;
                                        recvStreams[peerID] = peer;
                                }
                        }
 
                        private function sendSomeData(str:String,farIds:String):void{
                                if(str!=null&&str!=""){
                                        str = str.replace(/(^[\r\n\t\s]+)|([\r\n\t\s]$)/g,"");
                                        farIds = farIds == null ? "" : farIds.replace(/[^a-z0-9;]/gi,"");
                                        if(farIds!=""){
                                                var farId:Array = farIds.split(";");
                                                for(var i:int;i<farId.length;i++){
                                                        if(farId[i]&&sendStreams[farId[i]]){
                                                                sendStreams[farId[i]].send('receiveSomeData', str, myPeerID);
                                                        }
                                                }
                                        }
                                        else{
                                                for(var id:String in sendStreams){
                                                        sendStreams[id].send('receiveSomeData', str, myPeerID);
                                                }
                                        }
                                }
                        }
 
                        private function receiveSomeData(str:String, farId:String):void{
                                ExternalInterface.call("receiveSomeData", str, farId);
                        }
 
                        public function init():void{
                                ExternalInterface.addCallback("initConnection",initConnection);
                                ExternalInterface.addCallback("sendSomeData",sendSomeData);
                                ExternalInterface.addCallback("initReceiveStream",initReceiveStream);
                                ExternalInterface.call("p2pStartInit");
                        }
                ]]>
        </mx:Script>
</mx:Application>

Код:

function getP2p(){
    if(navigator.appName.indexOf("Microsoft")!=-1)return window.p2p;
    else return document.p2p;
}

function p2pStartInit(){
    try{getP2p().initConnection()}
    catch(e){p2pError('flasherror')}
}

function initReceiveStream(p2pId){
    try{getP2p().initReceiveStream(p2pId)}
    catch(e){p2pError(e)}
}

function sendSomeData(str,ids){
    try{getP2p().sendSomeData(str,ids)}
    catch(e){p2pError(e)}
}

function p2pError(err){
    alert(err)
}

function receiveSomeData(str,id){
    alert('Received:'+str+'/'+id)
}

и что самое прекрасное - оно работает)))

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

если у кого есть опыт написания подобных приложений, объясните плиз мне как это сделать, только желательно простым языком, т.к. в actionscript я новичок.

заранее спасибо за помощь!

kutuzov 27.04.2013 15:00

http://tomkrcha.com/?tag=p2p

syegorius 28.04.2013 04:04

все кажеться разобрался... ошибка была в 2 ф-циях:

в initReceiveStream нужно было добавить:
Код AS3:

rs.receiveVideo(true);

и в onPeerConnect нужно заменить на

Код AS3:

recvVideos[subscriber.farID] = getVideoBox();
                                                        recvVideos[subscriber.farID].attachNetStream(recvStreams[subscriber.farID].stream);

в том видео которое в ответе выше нет вообще ничего полезного!


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

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