![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2009
Сообщений: 11
|
Возникла проблема при написании p2p-приложения - "звук передаётся в одну сторону"
Этот код я вызываю когда когда получаю статус: "NetConnection.Connect.Success" outcomingStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS); //создаём поток outcomingStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); //вещаем слушалку статусов outcomingStream.attachAudio( getMicrophone() ); //присоединяем микрофон outcomingStream.publish('publish_'+myId); //публикуем поток private function clientBroadcast(remoteID:String):void { incomingStream = new NetStream(netConnection, remoteID); incomingStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); incomingStream.client = clientHandler; incomingStream.play('publish_'+remoteID); } Помогите люди добрые... |
|
|||||
|
Регистрация: May 2011
Сообщений: 26
|
может тестите на одном компьютере а микрофон один ? И из этого кода не видно куда вы приатачили incomingStream , его тоже нужно приатачить к плееру, например.
И самое главное, перед тем как проигрывать потоки нужно убедиться что "NetStream.Connect.Success" Последний раз редактировалось cheluskin; 29.08.2011 в 02:04. |
|
|||||
|
Регистрация: May 2009
Сообщений: 11
|
На одном компе можно тестить нормально... можно проверить так: запустить в двух браузерах страницу http://labs.adobe.com/technologies/cirrus/samples/ и потом подключиться друг к другу, потом зайти в настройки Флеша одного браузера и там микрофон выкрутить в 0, и сказать чтонить - и мы это услышим, потом сделать обратное на другом браузере и мы теперь услышим другой браузер
|
|
|||||
|
Регистрация: May 2011
Сообщений: 26
|
вот же Ваш хандлер, почему не используете его ? У Вас звук не работает в другую сторону потому что соединение не успевает установиться в потоке
|
|
|||||
|
Регистрация: May 2009
Сообщений: 11
|
Цитата:
Добавлено через 2 часа 31 минуту Как я понимаю, что NetStream даёт возможность публиковать и проигрывать поток! так вот, получается я публикую поток, а потом когда ктото присоединяется, то проигрывает публикующий поток, а публикатор не получает звук из-за того что он только публикует, соответственно нужно публикатору ещё один поток создать для слушанья... я делал нечто подобное, в onPeerConnect я добавлял поток слушанья, но получалось так что приложение уходило в бессконечный цикл.. ппц, никто ваще не может помоч =(( |
|
|||||
|
Регистрация: May 2011
Сообщений: 26
|
Вы всё правильно делаете. Посмотрите внимательно примеры на этой странице, http://www.adobe.com/devnet/flashmed...fp_groups.html
сверху справа можно скачать архив с примером. Вы создали исходящий поток и приходящий, но проблема в том, что перед тем как присоединять звук к исходящему потоку нужно убедиться что поток к этому готов, для этого вы и написали строку но вы на netStatusHandler что-то повесили ? Например как это сделано у меня protected function onNetStatus( event:NetStatusEvent ):void { _logMsg( event.info.code ); switch( event.info.code ) { case "NetConnection.Connect.Success": { // We're connected...set the flag _netConnectionConnected = true; _createGroupSpec(); onStartOutgoingStream(); // We've connected to stratus, let's cache our ID _nearID = event.target.nearID; if (tmt != -1){ clearInterval(tmt); tmt = -1; } net_indicator_grean.visible = true; net_indicator_red.visible = false; nearid = _netConnection.nearID; // Let's create a Group to use with NetStream and NetGroup _createGroupSpec(); break; } case "NetConnection.Connect.Closed": { restartConnection(); net_indicator_grean.visible = false; net_indicator_red.visible = true; } case "NetConnection.Connect.Failed": { restartConnection(); net_indicator_grean.visible = false; net_indicator_red.visible = true; } case "NetConnection.Connect.Rejected": { restartConnection(); net_indicator_grean.visible = false; net_indicator_red.visible = true; } case "NetConnection.Connect.AppShutdown": { restartConnection(); net_indicator_grean.visible = false; net_indicator_red.visible = true; } case "NetConnection.Connect.InvalidApp": { if( _netGroup ) { clearNetGroup(); } restartConnection(); // clear references _outgoingStream = null; _incomingStream = null; // reset flags _netConnectionConnected = false; _outgoingStreamOn = false; _incomingStreamOn = false; net_indicator_grean.visible = false; net_indicator_red.visible = true; break; } case "NetStream.Connect.Success": { // Our stream connected successfully // Let's attach video and audio (either local or remote) if( _outgoingStreamOn ) { _attachLocalVideoAndAudio(); } break; } case "NetStream.Connect.Rejected": case "NetStream.Connect.Failed": { // Our stream failed to connect if( _outgoingStreamOn ) { _outgoingStreamOn = false; } else { _incomingStreamOn = false; } break; } case "NetStream.Publish.Start": { // outgoing stream is now published. break; } case "NetStream.MulticastStream.Reset": case "NetStream.Buffer.Full": default: { break; } // NetGroup Connection Events fire from NetConnection case "NetGroup.Connect.Success": { // let's let the app know the NetGroup is connected _netGroupConnected = true; net_indicator_grean.visible = true; net_indicator_red.visible = false; question = true; sendQuestion(); setTimeout(disableQuestion,10000); nb = _netGroup.convertPeerIDToGroupAddress(_netConnection.nearID); // Let's update the estimated member count _estimatedP2PMembers = _netGroup.estimatedMemberCount; break; } case "NetGroup.Connect.Rejected": case "NetGroup.Connect.Failed": { // let's clear the NetGroup ref and listener clearNetGroup(); break; } } } видите тут по событию NetStream.Connect.Success атачится моё видео и аудио , а не сразу при запуске потока , как у вас сделано. Я попробовал только что запихнуть атач звука прямо в функцию старта потока и тоже перестало работать. Но странно как у Вас работает в одну сторону. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:19. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|