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

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

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

Регистрация: Feb 2012
Сообщений: 10
Melody Передача звука идёт с большой задержкой в Р2Р

Здравствуйте все!
Вот беда у меня беда.. начал писать аудиочат на основе технологии Р2Р. Я запускаю 2 одинаковых приложения на локальном компе. Вроде бы всё работает, звук передаётся и воспринимается, но воспроизведение звука по началу отстаёт на 3-4 секунды, но по истечению некоторого времени (от 1 до 5 минут) всё выравнивается и звук воспроизводится сразу как только я что либо говорю в микрофон. В чём может быть беда?
Код AS3:
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
			   applicationComplete="OnApplicationComplete()">
	<fx:Script>
		<![CDATA[
			import mx.controls.Text;
			private var netConnection:NetConnection;
			private var netGroup:NetGroup;
			private var netStream:NetStream;
			private var speaker:NetStream;
			private var groupspec:GroupSpecifier;
			private var groupName:String;
			private 	const SERVER:String ='rtmfp://p2p.rtmfp.net/';
			private 	const DEVKEY:String = 'тут был мой ключ разраба';
			function netStatusHandler(e:NetStatusEvent):void {
				switch (e.info.code) {
					case 'NetConnection.Connect.Success':
						setupGroup();
						break;
					case 'NetStream.Connect.Success':
						// Create new NetGroup
					{netGroup = new NetGroup(netConnection, groupspec.groupspecWithAuthorizations());
						netGroup.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
					}
						break;
					case 'NetGroup.Connect.Success': OnNetStreamConnect();	break;
					case 'NetGroup.SendTo.Notify' :
						trace(e.info.message); 	break;
					default:
				}
			}
 
			private function OnNetStreamConnect():void
			{
				netStream.client = this;
				var mic:Microphone = Microphone.getMicrophone();
				if(mic)
				{
					mic.codec = SoundCodec.SPEEX;
					mic.setSilenceLevel(0);
					netStream.attachAudio(mic);
					StatusMessage("Есть микрофон\n");
					netStream.publish("stream");
				}
			}
			private function OnApplicationComplete():void
			{	userName.text = "user " + int(Math.random() * 65536);
				groupName ="BerkutSoft";
				StatusMessage("Connecting to \"" + SERVER + "\" ...\n");
				netConnection = new NetConnection();
				netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
				netConnection.connect(SERVER + DEVKEY); 
				StatusMessage("--NetConnection--\n");
			}
 
			function setupGroup():void {
				groupspec = new GroupSpecifier("bs/" + groupName);
				groupspec.serverChannelEnabled = true;
				groupspec.multicastEnabled = true;
				groupspec.postingEnabled = true;
				groupspec.routingEnabled = true;
				groupspec.peerToPeerDisabled = false;
				netStream = new NetStream(netConnection, groupspec.groupspecWithAuthorizations());
				netStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
				speaker = new NetStream(netConnection, groupspec.groupspecWithAuthorizations());
				speaker.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
				speaker.play("stream");		
			}
 
			private function StatusMessage(msg:Object):void
			{
				statusLog.text += msg;
				statusLog.verticalScrollPosition = statusLog.textHeight;
				statusLog.validateNow();
			}
		]]>
	</fx:Script>
 
	<s:TextInput id="userName" width="160" />
	<mx:TextArea id="statusLog" width="100%" height="100%"/>
 
</s:Application>

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

Регистрация: Feb 2012
Сообщений: 1,540
Как по мне, то проблема в том, что сейчас P2P еще не очень стабильный.

Старый 16.02.2012, 09:18
BerkutSoft вне форума Посмотреть профиль Отправить личное сообщение для BerkutSoft Найти все сообщения от BerkutSoft
  № 3  
Ответить с цитированием
BerkutSoft
 
Аватар для BerkutSoft

Регистрация: Feb 2012
Сообщений: 10
Для меня это единственный вариант, делать передачу данных через сервер я не могу

Старый 16.02.2012, 11:50
sstotenkopf вне форума Посмотреть профиль Отправить личное сообщение для sstotenkopf Найти все сообщения от sstotenkopf
  № 4  
Ответить с цитированием
sstotenkopf
 
Аватар для sstotenkopf

Регистрация: Aug 2010
Адрес: Саратов
Сообщений: 185
Проблема в net группах, зачем они вообще вам для p2p чата? Используйте direct connection проблема исчезнет....

Старый 17.02.2012, 12:26
BerkutSoft вне форума Посмотреть профиль Отправить личное сообщение для BerkutSoft Найти все сообщения от BerkutSoft
  № 5  
Ответить с цитированием
BerkutSoft
 
Аватар для BerkutSoft

Регистрация: Feb 2012
Сообщений: 10
Это получается что на поток подписываются все клиенты, кто подключился через мой devkey? Но мне нужно как то распределять группы людей по разным комнатам. Если это возможно через direct connectio, то не могли бы подсказать в каком направлении капать? Пробовал по вот этому варианту, и действительно, звук идёт без задержек, но как на нём сделать различные комнаты, тут я никак не могу додуматься

Старый 17.02.2012, 12:52
dsQuadro вне форума Посмотреть профиль Отправить личное сообщение для dsQuadro Посетить домашнюю страницу dsQuadro Найти все сообщения от dsQuadro
  № 6  
Ответить с цитированием
dsQuadro
 
Аватар для dsQuadro

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
я это реализовал подключая людей к разным группам, а уже внутри группы люди обмениваются ключами у устанавливают прямые соединения друг с другом

Старый 17.02.2012, 19:40
BerkutSoft вне форума Посмотреть профиль Отправить личное сообщение для BerkutSoft Найти все сообщения от BerkutSoft
  № 7  
Ответить с цитированием
BerkutSoft
 
Аватар для BerkutSoft

Регистрация: Feb 2012
Сообщений: 10
Цитата:
Сообщение от dsQuadro Посмотреть сообщение
я это реализовал подключая людей к разным группам, а уже внутри группы люди обмениваются ключами у устанавливают прямые соединения друг с другом
Имеется в виду вот это - NetGroup.addNeighbor(peerID:String)? В мануале вот что написано: "Вручную добавляет соседний узел путем немедленного подключения непосредственно к указанному peerID, который уже должен быть добавлен в эту группу."
А как я узнаю что он действительно соседний? Или придётся соединять всех со всеми? И хорошо если в группе будет 5, 10, 15 человек, а если 1000? Это может нагнуть интернет канал всех участников, или я чего то не понимаю? Подскажите пожалуйста, как правильно соединить людей друг к другу на прямую в группе.

Добавлено через 67 часов 39 минут
Есть у кого ещё какие идеи? Никак не пойму как это реализовать.

Старый 25.02.2012, 11:21
BerkutSoft вне форума Посмотреть профиль Отправить личное сообщение для BerkutSoft Найти все сообщения от BerkutSoft
  № 8  
Ответить с цитированием
BerkutSoft
 
Аватар для BerkutSoft

Регистрация: Feb 2012
Сообщений: 10
По умолчанию Р2Р Прямое соединение в группе. Как?

Пробовал метод NetGroup.addNeighbor(peerID:String), но проблему это не решило.


Последний раз редактировалось iNils; 25.02.2012 в 13:03.
Старый 25.02.2012, 22:43
sstotenkopf вне форума Посмотреть профиль Отправить личное сообщение для sstotenkopf Найти все сообщения от sstotenkopf
  № 9  
Ответить с цитированием
sstotenkopf
 
Аватар для sstotenkopf

Регистрация: Aug 2010
Адрес: Саратов
Сообщений: 185
Цитата:
Сообщение от BerkutSoft Посмотреть сообщение
Это получается что на поток подписываются все клиенты, кто подключился через мой devkey? Но мне нужно как то распределять группы людей по разным комнатам. Если это возможно через direct connectio, то не могли бы подсказать в каком направлении капать? Пробовал по вот этому варианту, и действительно, звук идёт без задержек, но как на нём сделать различные комнаты, тут я никак не могу додуматься
В бд записывать айди пользователей, распределяя их по комнатам, в зависимости от запроса выдавать приложению массив пользователей и подключать их

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

Регистрация: Feb 2012
Сообщений: 10
Цитата:
Сообщение от sstotenkopf Посмотреть сообщение
В бд записывать айди пользователей, распределяя их по комнатам, в зависимости от запроса выдавать приложению массив пользователей и подключать их
Спасибо большое! Я пришёл к тому же решению, но думал найти решение без использования БД

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

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

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


 


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


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