![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 10
|
Здравствуйте все!
Вот беда у меня беда.. начал писать аудиочат на основе технологии Р2Р. Я запускаю 2 одинаковых приложения на локальном компе. Вроде бы всё работает, звук передаётся и воспринимается, но воспроизведение звука по началу отстаёт на 3-4 секунды, но по истечению некоторого времени (от 1 до 5 минут) всё выравнивается и звук воспроизводится сразу как только я что либо говорю в микрофон. В чём может быть беда? <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> |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Как по мне, то проблема в том, что сейчас P2P еще не очень стабильный.
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 10
|
Для меня это единственный вариант, делать передачу данных через сервер я не могу
|
|
|||||
|
Регистрация: Aug 2010
Адрес: Саратов
Сообщений: 185
|
Проблема в net группах, зачем они вообще вам для p2p чата? Используйте direct connection проблема исчезнет....
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 10
|
Это получается что на поток подписываются все клиенты, кто подключился через мой devkey? Но мне нужно как то распределять группы людей по разным комнатам. Если это возможно через direct connectio, то не могли бы подсказать в каком направлении капать? Пробовал по вот этому варианту, и действительно, звук идёт без задержек, но как на нём сделать различные комнаты, тут я никак не могу додуматься
|
|
|||||
|
я это реализовал подключая людей к разным группам, а уже внутри группы люди обмениваются ключами у устанавливают прямые соединения друг с другом
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 10
|
Цитата:
А как я узнаю что он действительно соседний? Или придётся соединять всех со всеми? И хорошо если в группе будет 5, 10, 15 человек, а если 1000? Это может нагнуть интернет канал всех участников, или я чего то не понимаю? Подскажите пожалуйста, как правильно соединить людей друг к другу на прямую в группе. Добавлено через 67 часов 39 минут Есть у кого ещё какие идеи? Никак не пойму как это реализовать. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 10
|
Пробовал метод NetGroup.addNeighbor(peerID:String), но проблему это не решило.
Последний раз редактировалось iNils; 25.02.2012 в 13:03. |
|
|||||
|
Регистрация: Aug 2010
Адрес: Саратов
Сообщений: 185
|
Цитата:
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 10
|
Спасибо большое! Я пришёл к тому же решению, но думал найти решение без использования БД
|
![]() |
![]() |
Часовой пояс GMT +4, время: 23:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|