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

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

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

Регистрация: May 2009
Сообщений: 11
По умолчанию Звук передаётся только в одну сторону

Возникла проблема при написании 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 дня бьюсь - не могу разобраться!!!
Помогите люди добрые...

Старый 29.08.2011, 02:01
cheluskin вне форума Посмотреть профиль Отправить личное сообщение для cheluskin Найти все сообщения от cheluskin
  № 2  
Ответить с цитированием
cheluskin

Регистрация: May 2011
Сообщений: 26
может тестите на одном компьютере а микрофон один ? И из этого кода не видно куда вы приатачили incomingStream , его тоже нужно приатачить к плееру, например.
И самое главное, перед тем как проигрывать потоки нужно убедиться что "NetStream.Connect.Success"


Последний раз редактировалось cheluskin; 29.08.2011 в 02:04.
Старый 29.08.2011, 18:28
comz вне форума Посмотреть профиль Отправить личное сообщение для comz Найти все сообщения от comz
  № 3  
Ответить с цитированием
comz

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

Старый 29.08.2011, 20:23
cheluskin вне форума Посмотреть профиль Отправить личное сообщение для cheluskin Найти все сообщения от cheluskin
  № 4  
Ответить с цитированием
cheluskin

Регистрация: May 2011
Сообщений: 26
Код AS3:
incomingStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
вот же Ваш хандлер, почему не используете его ? У Вас звук не работает в другую сторону потому что соединение не успевает установиться в потоке

Старый 30.08.2011, 00:17
comz вне форума Посмотреть профиль Отправить личное сообщение для comz Найти все сообщения от comz
  № 5  
Ответить с цитированием
comz

Регистрация: May 2009
Сообщений: 11
Цитата:
Сообщение от cheluskin Посмотреть сообщение
Код AS3:
incomingStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
вот же Ваш хандлер, почему не используете его ? У Вас звук не работает в другую сторону потому что соединение не успевает установиться в потоке
А можно поподробнее с примерами. а то я много уже пересмотрел скриптов с использованием cirrus'а, а чтото такого как Вы говорите - не наблюдал! заранее сенкс =)

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

Старый 02.09.2011, 16:25
cheluskin вне форума Посмотреть профиль Отправить личное сообщение для cheluskin Найти все сообщения от cheluskin
  № 6  
Ответить с цитированием
cheluskin

Регистрация: May 2011
Сообщений: 26
Вы всё правильно делаете. Посмотрите внимательно примеры на этой странице, 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:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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