有没有一种方法可以在没有本地文件的情况下从服务器直播音频



我正在寻找一种从服务器连续流式传输音频的方法,主要问题是服务器端代码会接收许多url来流式传输。也会有一些情况下,url被实时交换,取而代之的是一段新的音频。我还没有找到一个不需要下载每个文件然后流式传输的解决方案,这会阻碍实时功能。

我曾尝试将vlc用于python,但目前无法更改正在流式传输的url。我也尝试过使用pyaudio,但我无法获得正确的音频格式,更不用说交换音频源了。

一个示例链接,fairwarning它将自动播放:音频

要生成发送到客户端的连续流,您需要将此项目分成两半。

播放

您需要一些东西来将源流从压缩格式解码为可以操作的非压缩标准格式。。。原始PCM样本。使用一个子进程并将其输出到STDOUT,这样您就可以在Python脚本中获得这些数据。如果你愿意,你可以使用VLC,但FFmpeg很容易:

ffmpeg -i "http://example.com/stream" -ar 48000 -ac 2 -f f32le -acodec pcm_f32le -

这将把原始PCM输出到STDOUT作为32位浮点,立体声,48 kHz。一旦采用了这种标准格式,就可以任意地加入流。因此,当你播放完一个流后,只需终止进程,切换到下一个流,并开始播放新流中的样本。

编码

你想创建一个单一的PCM流,然后你可以用一些外部编码器重新编码,基本上与你在播放时所做的相反。同样,FFmpeg可以为您做一些事情:

ffmpeg -f f32le -ar 48000 -ac 2 - -f opus -acodec libopus icecast://...

现在,您将注意到这里的输出示例,我建议将其发送到Icecast。Icecast是一款不错的流媒体服务器。如果您只想直接通过HTTP进行输出,那么您可以。但如果你向不止一个听众播放这条流,我建议让Icecast或类似的公司来帮你处理。

最新更新