我正在寻找一种从服务器连续流音频的方法,主要问题是它将接收许多URL的服务器端代码来流音频。在某些情况下,URL会被实时交换,而流式传输新的音频。我尚未找到一种解决方案,该解决方案不会涉及到我下载每个文件然后进行流传输,这会妨碍实时功能。
我尝试将vlc用于python,但不允许更改当前正在流式传输的url。我也尝试过使用pyaudio,但我无法获得正确的音频格式,更不用说交换音频来源了。
一个示例链接,警告它会自动播放:audio
答案 0 :(得分:2)
要制作连续流并发送给客户,您需要将该项目分成两半。
您需要一些东西来将源流从其压缩格式解码为可以处理的非压缩标准化格式...原始PCM样本。使用子进程并将其输出到STDOUT,以便您可以在Python脚本中获取该数据。您可以根据需要使用VLC,但FFmpeg非常简单:
ffmpeg -i "http://example.com/stream" -ar 48000 -ac 2 -f f32le -acodec pcm_f32le -
这将以32 kHz浮点数以48 kHz的立体声输出原始PCM到STDOUT。一旦采用这种标准格式,您就可以任意加入流。因此,当您播放完一个流后,只需终止该过程,切换到下一个流,然后开始播放新流中的样本。
您要创建一个PCM流,然后可以使用一些外部编码器重新编码,基本上与播放时相反。同样,FFmpeg可以为您做些事情:
ffmpeg -f f32le -ar 48000 -ac 2 - -f opus -acodec libopus icecast://...
现在,您将在此处注意到输出示例,我建议将其发送给Icecast。 Icecast是可以使用的体面流媒体服务器。如果您只想直接通过HTTP输出,则可以。但是,如果您正在将此流播放给多个听众,我建议让Icecast或类似的设备为您处理。