2015-08-20 81 views
2

我想通過幾個使用Nearby Connections API的設備流式傳輸音頻,但我不太確定這是否真的可行/值得推薦。使用Nearby Connections API進行音頻流式傳輸

我想要做的是將音頻文件(存儲在手機中的音樂以及來自諸如Google Music,Spotify等應用程序的音樂)廣播到其他連接的設備,以便他們可以在接收時播放歌曲歌曲的所有數據塊。

我認爲通過Nearby Connections API,當我們調用Nearby.Connections.sendReliableMessage()時,我們只能發送4KB有效負載塊,所以我現在所做的就是根據需要多次調用該函數,每次發送4KB塊直到我設法傳遞整個文件。對於onMessageReceived()Listener,我所做的就是將所有在字節數組中接收到的塊存儲起來,因此一旦所有塊傳輸完畢,我就可以從字節數組文件中播放歌曲。

隨着我採取的方法我想我能夠重現這首歌,一旦我把它轉移到它的整體,但我想重現這些歌曲,而我實際上接收數據塊,並與所有設備同步。

這對你們有意義嗎?這是正確的方法嗎?還有其他更有效的方法嗎? (我已經知道使用Wifi-Direct流式傳輸音頻的選項,但我希望使用Nearby)

回答

0

this tutorial中的人有類似的音頻塊問題。 他演示瞭如何播放歌曲,同時還下載了字節並構建了音頻文件。 也許你可以利用「增量媒體下載」 - 本教程的一部分。

報價:

這就是神奇的發生,因爲我們從以下網址的流媒體內容,直到我們有緩衝的啓動MediaPlayer的足夠的內容。然後,我們讓MediaPlayer在後臺播放,同時下載剩餘的音頻。如果MediaPlayer到達緩衝音頻的末尾,則我們將任何新下載的音頻傳輸到MediaPlayer,並讓它再次開始播放。

事情變得有點棘手,因爲在這裏:

(一)MediaPlayer的,似乎鎖定文件,所以我們不能簡單地添加我們的內容到現有文件。

...

如果這不工作,我只是將使用附近的連接來交換IP地址還有去一個WiFi直連解決方案。

我希望這可以幫助,我很想聽聽你最終的解決方案是什麼樣的!

0

我幾年前實現了這個功能,用於將串行流中發送的實時音頻/視頻數據包發送到Android 4.0設備。對於通過Nearby connections API流式傳輸的音頻(或視頻)數據包,它的工作原理是一樣的。

解決方案是從Android應用程序中運行一個http流媒體服務器,然後使用具有http流媒體功能的Android媒體播放器API來使用此應用程序(或者您可以將ExoPlayer嵌入到您的應用程序中,因爲它也支持http流)。

這是通過將數據流直接傳輸到設備上運行的FFSERVER進程來實現的。 Android NDK用於創建和管理作爲FFSERVER輸入所需的命名管道。

由於這是幾年前完成的,我還沒有在Android 4.1+版本上測試過。任何執行此操作的人在構建和分發FFSERVER時都必須遵守FFmpeg GPL/LGPL許可證。