【问题标题】:Browser not playing audio returned with Python Flask浏览器不播放 Python Flask 返回的音频
【发布时间】:2021-03-26 16:23:10
【问题描述】:

我有一个简单的 Python Flask 应用程序,用于返回我在服务器端(单独)生成的图像和音频。我的图像代码如下所示:

# various cv2 calls to generate an image
image_bytes = cv2.imencode('.png', image)
return Response(image_bytes[1].tobytes(), mimetype='image/png', status=200)

效果很好。但是,我似乎无法返回音频。这是代码:

AUDIO_FORMAT = 'audio/mp3'
headers = {"Content-Type": "application/json", "accept": AUDIO_FORMAT}
payload = {"text": text}
# call to generate audio from text
response = requests.post()
if response.status_code == 200:
    sound_data = response.content
    f = open('audio.mp3', 'wb')
    f.write(sound_data)
    f.close()
    return Response(sound_data,
                    mimetype=AUDIO_FORMAT,
                    status=200)

当我播放 audio.mp3 文件时,我听到了我期望的音频。当响应在浏览器中呈现时,我得到了音频播放器。但我什么也没听到,我得到的长度是 00:00。我在想我缺少一个编码/翻译步骤。

【问题讨论】:

  • 您提供的是音频绝对路径还是相对路径,请先检查一下
  • 更多信息。我写的文件,我可以在浏览器中打开,它可以正常播放。当我将该音频文件写入 Flask /static 目录,然后使用 return send_from_directory('static/audio', audio_filename) 返回它时,我得到了相同的浏览器错误。在我看到的控制台中,Error: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
  • 是的,路径似乎不是问题。我可以把.json或者.html文件和音频文件放在同一个目录下,用同样的代码返回,浏览器就理解了。
  • 很高兴知道,如果您在这里没有得到任何解决方案,我建议您在 discord flask server 那里询问您肯定可以获得帮助

标签: python flask audio mp3


【解决方案1】:

事实证明,我在正确的路径上将音频写入文件并返回该文件。在我的第一条评论中,我说将音频写入文件并使用send_from_directory 失败了。嗯,它是,但由于一个单独的错误。一旦我解决了这个问题,它就起作用了。

return send_from_directory('static/audio', file_name)

我想我明白为什么我原来的方法不起作用。当浏览器看到音频 mimetype 时,它​​会尝试使用音频控件播放它。该音频控件有一个src 属性指向我发送的音频。随后从音频控件正确地回调我的服务器失败,因为我没有保留该音频并提供它的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2011-03-05
    • 1970-01-01
    • 2017-07-12
    • 2020-12-17
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多