![]() |
|
|
![]() |
![]() |
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
Регистрация: May 2011
Сообщений: 221
|
![]() Хочу организовать передачу видео через Cirrus так, чтобы при этом во флешке передатчике тоже отображалось видео.
В документации написано что все просто, создаете NetConnection, конектите его, в нем создаете NetStream, аттачите видео к нетСтриму и запускаете нетСтрим на воспроизведение. Скажем так, пример из документации скомпилить мне удалось, но вот рпи попытке перенести эту ту же логику в свой проект успехом не увенчалась. Вобщем, расскажу поподробнее чего сделал. завел отдельный класс для соединений со статическим инициализатором public static function init():void { netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, onStatus); netConnection.connect("rtmfp://p2p.rtmfp.net", CIRRUS_KEY); } 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; } } 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(); } и класс клиент прикрепляет видео к потоку, после чего запускает воспроизведение public static function playVideo(video:Video, videoURL:String):void { video.attachNetStream(netStream); netStream.play(videoURL); } Объясните пожалуйста, что я делаю не так, видимо я не въезжаю в логику происходящего. Попутно хотелось бы уточнить, правильно ли я понимаю, что трансляция видео файла будет осуществляться с помощью метода netStream.publish? |
|
|||||
Для начала
public class ReciverAPI extends Sprite { private const SERVER_ADDRESS:String = "rtmfp://stratus.adobe.com/"; private const DEVELOPER_KEY:String = "ваш_ключ"; nc = new NetConnection(); nc.addEventListener(NetStatusEvent.NET_STATUS,ncStatus); nc.connect(SERVER_ADDRESS+DEVELOPER_KEY); private function ncStatus(event:NetStatusEvent):void{ txt.appendText('ncStatus'+event.info.code+"\n"); trace(event.info.code); myPeerID = nc.nearID; if (event.info.code == 'NetConnection.Connect.Success' ) { initBroadcast(); } trace("myPeerID: "+myPeerID); } private function initBroadcast():void { trace("initSendStream"); txt.appendText("initBroadcast\n"); broadcast = new NetStream(nc,NetStream.DIRECT_CONNECTIONS); broadcast.addEventListener(NetStatusEvent.NET_STATUS, broadcastHandler); broadcast.publish("channel"); var broadcastClient:Object = new Object(); broadcastClient.onPeerConnect = function(callerns:NetStream):Boolean { txt.appendText("broadcast onPeerConnect\n"+callerns.farID+"\n"); farPeerID = callerns.farID; trace("onPeerConnect "+farPeerID); return true; } broadcast.client = broadcastClient; sendMyPeerId(); } в приемнике точно так же подключаетесь к цирусу, но вы не создаете вещание, а присоединяетесь к полученному примерно так public function active(peerId:String):void { txt.appendText(peerId+"\n"); try { recvStream = new NetStream(nc,peerId); recvStream.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); recvStream.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); recvStream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler); recvStream.play("channel"); recvStream.client = this; } catch (e:Error) { txt.appendText("error"+e+"\n"); } catch (e:SecurityError) { txt.appendText("SecurityError"+e+"\n"); } txt.appendText("connection\n"); } для полной связи между двумя клиентами нужно создавать для каждого вещание и множество слушателей. Добавлено через 9 минут И да... Есть множество людей у которых Р2Р не будет работать, примерно 30% от трафика нужно автоматически переводить на live
__________________
return this... |
|
|||||
Регистрация: May 2011
Сообщений: 221
|
в тестовом режиме хочу подключиться к самому себе, пишу:
public static function playVideo(video:Video, videoURL:String):void { var stream:NetStream = new NetStream(netConnection, netConnection.nearID); stream.addEventListener(NetStatusEvent.NET_STATUS, onStatus); video.attachNetStream(stream); stream.play(videoURL); } Ах да, для внесения ясности, я хочу транслировать видеофайл Последний раз редактировалось Фенёк; 03.03.2013 в 16:44. |
|
|||||
Нет разницы что вы хотите транслировать. Я бы на вашем месте, создал все таки две флешки и проводил тесты подключаясь из одной в другую. Из IDE пытаетесь подключиться к видео а в скомпилированной ехе транслируете поток.
__________________
return this... |
|
|||||
Регистрация: May 2011
Сообщений: 221
|
А принципиально, чтобы была exe?
И да, кстати, насчет трасляции файла, я так понял что его нужно будет транслировать через метод appendBytes. Хотел бы уточнить насколько это так и поинтересоваться нет ли какого примера по этому. Добавлено через 12 часов 33 минуты Посмотрел исходники официального приложения Cirrus, и если честно вообще впал в ступор, там по какой-то причине публикация и проигрывание ведется на разные каналы код приложения довольно объемный, так что вероятно конечно я что-то где-то и путаю,но как факт исходные данные выглядят именно так. Честно говоря меня совершенно сбивает с толку вся эта логика. Например я попытался транслировать видео с камеры в поток и попутно показывать то, что отправляется с камеры в экземпляре класса Video и к моему величайшему удивлению я опять ничего не вижу. Поясните пожалуйста в чем я не прав? |
|
|||||
Регистрация: Mar 2007
Сообщений: 39
|
атачте камеру напрямую в видео, а не публикующейся поток.
video.attachCamera(camera); |
|
|||||
Регистрация: May 2011
Сообщений: 221
|
окей, а как тогда поступить с принимающей стороной? Там же видео нужно по идее коннектить к потоку, верно?
|
|
|||||
[+1 16.03.13]
[+1 22.03.13] Регистрация: Dec 2012
Сообщений: 100
|
Незнаю, может не в тему будет, но вот тут можно скачать свободно распространяемые исходники текстового чата на основе p2p:
http://code.google.com/p/team-pomodo...ebia/pomodoro/ Добавлено через 7 минут и кстати, статеичка, поясняющая суть чата на p2p: http://habrahabr.ru/sandbox/43059/ |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:28. |
|
« Предыдущая тема | Следующая тема » |
Теги |
cirrus , netconnection , netstream , p2p , video |
Опции темы | |
Опции просмотра | |
|
|