| 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 я новичок.
заранее спасибо за помощь!
|