Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Звук передаётся только в одну сторону (http://www.flasher.ru/forum/showthread.php?t=165946)

comz 28.08.2011 16:36

Звук передаётся только в одну сторону
 
Возникла проблема при написании p2p-приложения - "звук передаётся в одну сторону"
Этот код я вызываю когда когда получаю статус: "NetConnection.Connect.Success"
Код AS3:

                                outcomingStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS); //создаём поток
                                outcomingStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); //вещаем слушалку статусов
 
                                outcomingStream.attachAudio( getMicrophone() ); //присоединяем микрофон
                                outcomingStream.publish('publish_'+myId); //публикуем поток

Далее я подключаюсь к Юзеру:
Код AS3:

                        private function clientBroadcast(remoteID:String):void
                        {
                                incomingStream = new NetStream(netConnection, remoteID);
                                incomingStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
                                incomingStream.client = clientHandler;
                                incomingStream.play('publish_'+remoteID);
}

Ппц, уже 2 дня бьюсь - не могу разобраться!!!
Помогите люди добрые...

cheluskin 29.08.2011 02:01

может тестите на одном компьютере а микрофон один ? И из этого кода не видно куда вы приатачили incomingStream , его тоже нужно приатачить к плееру, например.
И самое главное, перед тем как проигрывать потоки нужно убедиться что "NetStream.Connect.Success"

comz 29.08.2011 18:28

На одном компе можно тестить нормально... можно проверить так: запустить в двух браузерах страницу http://labs.adobe.com/technologies/cirrus/samples/ и потом подключиться друг к другу, потом зайти в настройки Флеша одного браузера и там микрофон выкрутить в 0, и сказать чтонить - и мы это услышим, потом сделать обратное на другом браузере и мы теперь услышим другой браузер

cheluskin 29.08.2011 20:23

Код AS3:

incomingStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

вот же Ваш хандлер, почему не используете его ? У Вас звук не работает в другую сторону потому что соединение не успевает установиться в потоке

comz 30.08.2011 00:17

Цитата:

Сообщение от cheluskin (Сообщение 1026645)
Код AS3:

incomingStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

вот же Ваш хандлер, почему не используете его ? У Вас звук не работает в другую сторону потому что соединение не успевает установиться в потоке

А можно поподробнее с примерами. а то я много уже пересмотрел скриптов с использованием cirrus'а, а чтото такого как Вы говорите - не наблюдал! заранее сенкс =)

Добавлено через 2 часа 31 минуту
Как я понимаю, что NetStream даёт возможность публиковать и проигрывать поток! так вот, получается я публикую поток, а потом когда ктото присоединяется, то проигрывает публикующий поток, а публикатор не получает звук из-за того что он только публикует, соответственно нужно публикатору ещё один поток создать для слушанья... я делал нечто подобное, в onPeerConnect я добавлял поток слушанья, но получалось так что приложение уходило в бессконечный цикл.. ппц, никто ваще не может помоч =((

cheluskin 02.09.2011 16:25

Вы всё правильно делаете. Посмотрите внимательно примеры на этой странице, http://www.adobe.com/devnet/flashmed...fp_groups.html
сверху справа можно скачать архив с примером.

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

Код AS3:

outcomingStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

но вы на netStatusHandler что-то повесили ? Например как это сделано у меня

Код AS3:

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;
                                        }                                                                                                                                                               
                                }
                        }

обратите внимание на этот участок

Код AS3:

case "NetStream.Connect.Success":
                                        {
                                                // Our stream connected successfully
                                                // Let's attach video and audio (either local or remote)
 
 
                                                if( _outgoingStreamOn )
                                                {
                                                        _attachLocalVideoAndAudio();
                                                }

видите тут по событию NetStream.Connect.Success атачится моё видео и аудио , а не сразу при запуске потока , как у вас сделано. Я попробовал только что запихнуть атач звука прямо в функцию старта потока и тоже перестало работать. Но странно как у Вас работает в одну сторону.


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

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