2013-03-10 84 views
2

我想通過GKSession將音樂從一個設備流式傳輸到另一個設備,以使音樂完美同步。到目前爲止,我知道如何使用this獲取音頻,但我不確定幾件事情。我很確定我必須使用AudioFileReadPackets來傳輸數據。IOS同步音樂流媒體

  1. 我應該如何打包並從內存緩衝區發送數據包數據作爲流?
  2. 另一方面,我如何將收到的數據包轉換回音頻流?
  3. 確保數據包同步播放的最佳方法是什麼?

回答

8

重要更新: 我只是在GitHub上創建一個repo這幾乎不會你問什麼。一探究竟!下面

是我的舊的答案:

  1. 一個。首先你需要從你的音樂中獲得音頻緩衝數據,就像我在github項目中做的那樣。

    b。您希望獲取這些數據並將其分組爲數據包,每個數據包包含標題信息,稍後您將使用這些信息來管理其傳送並確保它們已同步。因此,例如每個數據包的時間戳,它的順序,音樂文件哈希等。請參閱this答案以獲得一個想法,然後看看this優秀教程,該教程將詳細地向您顯示如何打包數據包任何目的。

  2. 在網絡的另一端,您以與封裝非常相似的方式解包數據包。再次參考上面的教程,詳細討論如何做到這一點。

  3. 這是最難的部分。幸運的是,你只處理兩個設備..所以你可以使用GKSession做到這一點..否則,你將不得不降低一個級別(即使用bonjour ..至極GKSession是..的包裝,並增加了大量的開銷你買不起的實時應用程序..但不要驚慌.. this本書有一個很好的和簡單的例子爲使用Bonjour ..)

的想法是,你要收集足夠的數據包在另一端填充音頻隊列緩衝區,那麼你想發送一個不可靠的數據包(讀取:udp協議)來跳轉開始播放音樂。與udp發送,它接近即時交付(我認爲人耳無法區分只有兩個設備之間的延遲)..偶爾一個不可靠的數據包將丟失雖然..所以你將不得不活着用它或者想辦法解決這個問題。

最後但並非最不重要你肯定要抓住learning core audio的副本..任何在iOS中做核心音頻的人都需要這個。另外請看this回答下面的討論..它會讓你注意到很多事情要處理核心音頻/實時iOS應用程序。

祝你好運!

+0

感謝您發佈您的存儲庫,這是非常有益的。 – tancik 2013-03-15 23:09:52

+1

感謝您的回購!它保存了很多天爲我工作! – iphonemaclover 2013-08-14 07:58:38

+0

不客氣的男人!不要忘記支持它:D – abbood 2013-08-14 10:03:15