我正在努力寻找一种从Python服务器上流式传输合成音频的解决方案。合成音频以增量方式生成并作为np.float32
NumPy数组返回。然后需要将它从NumPy数组转换为MP3块。最后,MP3区块通过flask
提供服务
下面是一些伪代码:
import numpy
from flask import Flask
from flask import Response
app = Flask(__name__)
sample_rate = 24000
def pcm_to_mp3():
raise NotImplementedError()
def get_synthetic_audio():
""" Mock function for synthetic audio. """
while True:
yield numpy.random.rand(1024) * 2 - 1 # Return: 32-bit Floating Point PCM
@app.route('/stream', methods=['GET'])
def get_stream():
""" Stream synthetic audio. """
def response():
for numpy_array in get_synthetic_audio():
# NOTE: The raw audio needs additional metadata to be playable like sample rate.
yield pcm_to_mp3(numpy_array, sample_rate=sample_rate)
return Response(
response(),
headers={
# NOTE: Ensure stream is not cached.
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0',
# NOTE: Enable streaming.
'Transfer-Encoding': 'chunked'
},
mimetype='audio/mpeg')
if __name__ == "__main__":
app.run()
虽然类似的设置适用于WAV文件,但我不知道如何对MP3文件执行类似的设置
谢谢大家!
来源
我找到了一个可行的方法:
在探索过程中,我了解到
flask
不支持分块传输编码。这是令人惊讶的,因为分块传输编码是在1997年作为HTTP 1.1的一部分引入的不管怎样,我惊讶地发现
ffmpeg
的流与flask
兼容,并且它在Safari、Firefox和Chrome上得到了支持相关问题 更多 >
编程相关推荐