使用Nearby Connections API

时间:2015-08-20 11:52:02

标签: android audio streaming audio-streaming

我正在尝试使用Nearby Connections API在多个设备上传输音频,但我不确定这是否真的可行/值得推荐。

我想要做的是将音频文件(存储在手机上的歌曲以及Google Music,Spotify等应用程序中的歌曲)广播到其他连接的设备,这样他们就可以开始播放歌曲了歌曲的数据块。

我认为使用Nearby Connections API,我们只能在调用Nearby.Connections.sendReliableMessage()时发送4KB有效负载块,所以我到目前为止所做的就是根据需要多次调用该函数每次发送4KB块直到我设法传递整个文件。对于onMessageReceived()监听器,我所做的是将我收到的所有块存储在一个字节数组中,这样一旦传输完所有块,我就可以从字节数组文件中播放这首歌。

通过我采用的方法,我想我能够在完全转移它后再现这首歌,但我想在我实际收到数据块时重现这些歌曲,并与所有设备同步。

这对你们有意义吗?这是正确的方法吗?还有其他更有效的方法吗? (我已经知道使用Wifi-Direct播放音频的选项,但我想使用Nearby)

2 个答案:

答案 0 :(得分:0)

this tutorial中的人与音频块有类似的问题。 他演示了如何播放歌曲,同时仍然下载字节并构建音频文件。 也许您可以利用本教程的"增量媒体下载" 部分。

引用:

  

当我们从网址流中下载媒体内容,直到我们有足够的内容缓冲来启动MediaPlayer时,才会发生神奇的事情。然后,当我们下载剩余的音频时,我们让MediaPlayer在后台播放。如果MediaPlayer到达缓冲音频的末尾,那么我们将任何新下载的音频传输到MediaPlayer,让它再次开始播放。

     

事情变得有点棘手,因为:

     

(a)MediaPlayer似乎锁定了文件,因此我们不能简单地将我们的内容附加到现有文件中。

     

...

如果这不起作用,我会使用附近的连接来交换IP地址,然后选择Wifi-Direct解决方案。

我希望这会有所帮助,我很乐意听到您的最终解决方案的样子!

答案 1 :(得分:0)

几年前我实现了这一功能,用于将串行流中发送的实时音频/视频数据包发送到Android 4.0设备。对于通过Nearby connections API流式传输的音频(或视频)数据包,它的工作方式相同。

解决方案是在Android应用程序中运行一个http流媒体服务器,然后使用Android媒体播放器API及其http流媒体功能来消费它(或者你可以在你的应用程序中嵌入ExoPlayer,因为它也支持http流媒体)。

这是通过将数据流直接传送到设备上运行的FFSERVER进程来实现的。 Android NDK用于创建和管理作为FFSERVER输入所需的命名管道。

几年前我没有在Android 4.1+版本上测试过这个问题。执行此操作的任何人在构建和分发FFSERVER时都需要遵守FFmpeg GPL / LGPL许可证。