Показать сообщение отдельно
Старый 03.03.2013, 02:39
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 1  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Question Передача и вопроизведение видео через P2P

Хочу организовать передачу видео через Cirrus так, чтобы при этом во флешке передатчике тоже отображалось видео.

В документации написано что все просто, создаете NetConnection, конектите его, в нем создаете NetStream, аттачите видео к нетСтриму и запускаете нетСтрим на воспроизведение.

Скажем так, пример из документации скомпилить мне удалось, но вот рпи попытке перенести эту ту же логику в свой проект успехом не увенчалась.

Вобщем, расскажу поподробнее чего сделал.

завел отдельный класс для соединений со статическим инициализатором
Код AS3:
		public static function init():void
		{
			netConnection = new NetConnection();
			netConnection.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
			netConnection.connect("rtmfp://p2p.rtmfp.net", CIRRUS_KEY);
		}
создал в нем обаботчик событий

Код AS3:
private static function onStatus(event:NetStatusEvent):void
		{ 
			switch(event.info.code)
			{ 
			case "NetConnection.Connect.Success":
				onConnect();
				break; 
 
			case "NetStream.Play.StreamNotFound":
        		        trace("Unable to locate video");
              			break;
			} 
		}
на коннект создаю стрим и группу и отправляю событие на обработку делегату
Код AS3:
private static function onConnect():void
		{
			var groupSpecifier:GroupSpecifier = new GroupSpecifier(GROUP);
			groupSpecifier.multicastEnabled = true;
			groupSpecifier.postingEnabled = true;
			groupSpecifier.serverChannelEnabled = true;
 
			netStream = new NetStream(netConnection, groupSpecifier.groupspecWithAuthorizations());
			netStream.client = new CustomClient();
			netStream.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
 
			netGroup = new NetGroup(netConnection, groupSpecifier.groupspecWithAuthorizations());
			netGroup.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
 
			delegate.onConnect();
		}
делегат собирает у себя объект видео, размещает его в списке отображения и отдает управление обратно объекту клиенту

Код AS3:
			var video:Video = new Video();
			addChild(video);
			Cirrus.playVideo(video, videoURL);
и класс клиент прикрепляет видео к потоку, после чего запускает воспроизведение
Код AS3:
		public static function playVideo(video:Video, videoURL:String):void
		{
			video.attachNetStream(netStream);
            		netStream.play(videoURL);
		}
Ну и вобщем-то СЮРПРИЗ! Ничего не работает. Даже ошибок нет.

Объясните пожалуйста, что я делаю не так, видимо я не въезжаю в логику происходящего. Попутно хотелось бы уточнить, правильно ли я понимаю, что трансляция видео файла будет осуществляться с помощью метода netStream.publish?