2011-04-01 77 views
0

用p2p在這裏掙扎。有人能爲我澄清這一點......我讀的所有內容都不一致,包括Adobe文檔。p2p發佈並播放

要發佈你需要一個P2P:

var nc:NetConnection = new NetConnection(); 
var ns:NetStream = new NetStream(nc, NetStream.DIRECT_CONNECTIONS); 
ns.attachCamera(cam); 
ns.attachAudio(mic); 

groupSpecifier = new GroupSpecifier("fms.mygroup"); 
groupSpecifier.multicastEnabled = true; 
groupSpecifier.postingEnabled = true; 
groupSpecifier.serverChannelEnabled = true; 

group = new NetGroup(nc,groupSpecifier.groupspecWithAuthorizations()); 
group.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); 

ns.publish("stream"); 

這應該發佈,我相信。是對的嗎?

再有就是觀看現場直播:

var v2:Video = new Video(); 
var ns2:NetStream = new NetStream(nc,myPeerID); 
ns2.addEventListener(NetStatusEvent.NET_STATUS,onPublish); 
ns2.client = this; 
ns2.play(userName); 
v2.attachNetStream(ns2); 
c.addChild(v2); 

myPeerID是獨一無二的,但我不能看到流。所以這裏是我的問題:

1)是否有可能我出於某種原因看不到自己的流?

2)對於查看...也許它沒有看到流,因爲我沒有對groupSpecifier說什麼。雖然我確實將groupSpecifier附加到nc,所以不會全部設置,因爲我已經這樣做了?我只是想,也許我沒有連接到同一組。

3)我做了配置multistream html頁面,就像它說的那樣。然後我把manifest.f4m放在服務器上,就像它說的那樣。我需要參考我的流名稱中的任何內容嗎?我看到一篇文章給出了我可以在FMLE中使用的查詢字符串。我想也許我需要使用它作爲我的流名稱?

4)在netStream連接中查看...有些人將它作爲第二個參數作爲peerID,而其他人則將其設置爲groupSpecifier.groupspecWithAuthorizations()。這將是peerID的權利,因爲我需要說我想查看那個人,並且知道要連接到哪個組,因爲我指定了當我在nc中執行GroupSpecifier時。

5)發佈中的流的名稱.... ns.publish(「流」)是什麼意思?它可以是馬還是驢?爲什麼我必須指定任何東西,如果它應該根據groupSpecifier知道要連接的組是什麼?是否因爲你可以連接到一個「組」,並在該組內,你可以連接到「驢」netstream更細的?

回答

1

2)你與NetStream超過NetConnection發佈,不NetStream超過NetGroup,所以直接發佈到其他同行時NetStream(nc, peerId)

連接當您使用NetStream(nc, NetStream.DIRECT_CONNECTIONS)你不發表你不需要NetGroup在所有在NetGroup,所以你需要如果您使用NetStream(nc, gs.groupspecWithAuthorizations())然後你NetStream(nc, gs.groupspecWithAuthorizations())

NetStream(nc, peerID)

連接

您需要選擇NetStream中發佈了@ DIRECT_CONNECTIONS或NetStream @ NetGroup會

4A)參數peerID爲需求,對NetStream @ DIRECT_CONNECTIONS

4b)的說法GS。groupspecWithAuthorizations()是的NetStream @與NetGroup

5)是它:)您需要發佈和播放相同的字符串,它的流的識別:ns.publish("StreamName")然後ns2.play("StreamName")