2015-08-20 56 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许可证。