Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.04.2013, 23:26
syegorius вне форума Посмотреть профиль Отправить личное сообщение для syegorius Найти все сообщения от syegorius
  № 1  
Ответить с цитированием
syegorius

Регистрация: Nov 2010
Сообщений: 91
Cool 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 я новичок.

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

Старый 27.04.2013, 15:00
kutuzov вне форума Посмотреть профиль Отправить личное сообщение для kutuzov Найти все сообщения от kutuzov
  № 2  
Ответить с цитированием
kutuzov
 
Аватар для kutuzov

Регистрация: Jul 2005
Сообщений: 135
http://tomkrcha.com/?tag=p2p
__________________
хоумпага

Старый 28.04.2013, 04:04
syegorius вне форума Посмотреть профиль Отправить личное сообщение для syegorius Найти все сообщения от syegorius
  № 3  
Ответить с цитированием
syegorius

Регистрация: Nov 2010
Сообщений: 91
все кажеться разобрался... ошибка была в 2 ф-циях:

в initReceiveStream нужно было добавить:
Код AS3:
rs.receiveVideo(true);
и в onPeerConnect нужно заменить на

Код AS3:
recvVideos[subscriber.farID] = getVideoBox();
							recvVideos[subscriber.farID].attachNetStream(recvStreams[subscriber.farID].stream);
в том видео которое в ответе выше нет вообще ничего полезного!

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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