2013-05-22 43 views
1

我想從其中一個節點發佈一個mp3文件,並從其他節點播放,非常類似於RTMFP聊天應用。Netstream - 如何使用RTMFP發佈mp3文件

從我瞭解到目前爲止:

  1. netstream.publish用於發佈流RTMFP NetConnection和netstream.play從其他同行播放的流。
  2. 串流麥克風和相機捕捉的步驟如下:
    netstream.attachCamera(cam);
    netstream.attachAudio(mic);
    netstream.publish('video');
  3. 但是我沒有看到使用Netstream發佈(流)mp3文件的方法。請注意,使用NetStream是必不可少的,因爲我想將音頻「發佈」給監聽對象。

請糾正我,如果我錯了上面。理想情況下,我想實現的目標應該很容易實現,但我找不到任何指針。是可以使用相同的ByteArray。只要與RTMFP協同工作,任何其他的流媒體策略都會受到歡迎。代碼示例的鏈接也很棒。

+0

我不認爲將有可能使用NetStream的發佈。另一種解決方案是使用ByteArray上傳MP3文件,將該文件存儲在服務器中,然後在監聽節點上使用netstream進行播放。但它會有很大的延遲。 – fmodos

回答

5

你偶然發現了NetStream的一個奇怪的怪癖。它可以從麥克風發佈聲音,但不能從任意聲源發佈。有一些解決方法,比其他更復雜。

  • 通過虛擬麥克風進行流式傳輸。最簡單的解決方法,如果你的項目允許你使用它,最好的(IMO)。您只需安裝一個虛擬麥克風/相機軟件(例如:ManyCam),並使用它通過虛擬麥克風流式傳輸您的mp3文件。完成後,您只需將此麥克風綁定到您的AS3應用程序。可悲的是,它不適合您的項目,因爲您無法合理地要求發佈端安裝虛擬麥克風。

  • 使用Sound.extract(),NetStream.send()SampleDataEvent.SAMPLE_DATA進行流式傳輸。您可能知道,NetStream.send()可用於向對等方發送消息。事情是,這些消息是序列化的,可以是ByteArray。因此,您可以發送帶有NetStream.send()的音頻數據樣本。發佈pee應用程序可以獲得Sound.extract()的數據樣本,並且接收應用程序可以播放它們,這要歸功於SAMPLE_DATA事件。其中一個問題是要知道什麼時候應該發送新樣本。要進行管理,您應該建議在發佈應用程序中使用SAMPLE_DATA,並在每次發生事件時發送新數據。這種方法的主要問題是,由於您不使用RTMP的標準方式來流式傳輸音頻,因此它需要一個自定義應用程序供接收器播放。鑑於你對你的項目所說的話,這應該不成問題。

  • 使用Socket重現RTMFP協議。這將是漫長的,非常複雜的,並且容易出錯。除了作爲一種學習體驗,我絕不會推薦這樣做。您需要閱讀,理解和實施大部分RTMFP Specification

+0

你有沒有機會有你描述的Sound.extract()方法的工作示例? –