使用Nearby Connections API进行音频流式传输

问题描述 投票:2回答:2

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

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

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

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

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

android audio streaming audio-streaming
2个回答
0
投票

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

引用:

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

这里的事情有点棘手,因为:

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

...

如果这不起作用,我只会使用附近的连接来交换IP地址并转而使用Wifi-Direct解决方案。

我希望这会有所帮助,我很想知道你的最终解决方案是什么样的!


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许可证。

© www.soinside.com 2019 - 2024. All rights reserved.