【问题标题】:Audio streaming using Nearby Connections API使用 Nearby Connections API 进行音频流式传输
【发布时间】:2015-08-20 11:52:01
【问题描述】:

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

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

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

通过我采用的方法,我想我可以在将歌曲全部传输后重现歌曲,但我想在实际接收数据块时重现歌曲,并以与所有设备同步的方式。

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

【问题讨论】:

    标签: android audio streaming audio-streaming


    【解决方案1】:

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

    引用:

    这就是我们从 url 流下载媒体内容直到我们有足够的缓冲内容来启动 MediaPlayer 的神奇之处。然后我们让 MediaPlayer 在后台播放,同时下载剩余的音频。如果 MediaPlayer 到达缓冲音频的末尾,那么我们将任何新下载的音频传输到 MediaPlayer 并让它重新开始播放。

    这里有些棘手,因为:

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

    ...

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

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

    【讨论】:

      【解决方案2】:

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

      解决方案是在 Android 应用程序中运行一个 http 流媒体服务器,然后使用具有 http 流媒体功能的 Android 媒体播放器 API 使用它(或者如果您愿意,您可以将 ExoPlayer 嵌入到您的应用程序中,因为它也支持 http 流媒体)。

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

      正如几年前所做的那样,我还没有在 Android 4.1+ 版本上进行过测试。任何这样做的人在构建和分发 FFSERVER 时都需要遵守 FFmpeg GPL/LGPL 许可证。

      【讨论】:

        猜你喜欢
        • 2013-02-04
        • 2018-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 2013-04-12
        • 2012-01-18
        相关资源
        最近更新 更多