pythonweb 网页访问服务器音频文件

这个音频不能太大了,流媒体的模式,我一直没弄好,最后就暴力传入音频base64文件,在h5的页面里<audio> 标签把src属性设置一下就好了。

先看服务端代码

import base64

from flask import Flask
from flask import request
from flask import Response

@app.route('/audio', methods=['GET'])
def audio():
    def generate1(path):
        with open(path, 'rb') as fmp3:
            data = fmp3.read(1024)
            while data:
                yield data
                data = fmp3.read(1024)
        return data

    # return Response(generate('audio.wav'), mimetype="audio/x-wav")
    if request.args['wav_name'] != '':
        path = request.args['wav_name']
        return Response(generate1(path), mimetype='audio/x-wav')


@app.route('/audio22', methods=['GET'])
def audio22():
    def generate1(path):
        with open(path, 'rb') as fmp3:
            data = fmp3.read()
            data = base64.b64encode(data)
            return data

    # return Response(generate('audio.wav'), mimetype="audio/x-wav")
    if request.args['wav_name'] != '':
        path = request.args['wav_name']
        return generate1(path)


@app.route('/audio1', methods=['GET'])
def audio1():
    name = request.args['wav_name']
    angry = request.args['angry']
    sad = request.args['sad']
    happy = request.args['happy']
    surprise = request.args['surprise']
    return '<h3>原音频</h3>' \
           '<audio controls="controls" type="audio/x-wav"></audio>' \
           '<h3>生气</h3>' \
           '<audio controls="controls" type="audio/x-wav"></audio>' \
           '<h3>悲伤</h3>' \
           '<audio controls="controls" type="audio/x-wav"></audio>' \
           '<h3>高兴</h3>' \
           '<audio controls="controls" type="audio/x-wav"></audio>' \
           '<h3>惊奇</h3>' \
           '<audio controls="controls" type="audio/x-wav"></audio>' \
           '<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>' \
           '<script>' \
            f'$.get("{request.host_url}audio22?wav_name={name}",' \
           'function (data) {document.getElementsByTagName("audio")[0].setAttribute("src", "data:audio/x-wav;base64,"+data);' \
           '});' \
            f'$.get("{request.host_url}audio22?wav_name={angry}",' \
           'function (data) {document.getElementsByTagName("audio")[1].setAttribute("src", "data:audio/x-wav;base64,"+data);' \
           '});' \
            f'$.get("{request.host_url}audio22?wav_name={sad}",' \
           'function (data) {document.getElementsByTagName("audio")[2].setAttribute("src", "data:audio/x-wav;base64,"+data);' \
           '});' \
            f'$.get("{request.host_url}audio22?wav_name={happy}",' \
           'function (data) {document.getElementsByTagName("audio")[3].setAttribute("src", "data:audio/x-wav;base64,"+data);' \
           '});' \
            f'$.get("{request.host_url}audio22?wav_name={surprise}",' \
           'function (data) {document.getElementsByTagName("audio")[4].setAttribute("src", "data:audio/x-wav;base64,"+data);' \
           '});' \
           ' </script>'


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000, debug=True)

把这个文件跑起来

网页端输入

http://192.168.0.106:8000/audio1?wav_name=audio.wav&angry=audio.wav&sad=audio.wav&happy=audio.wav&surprise=audio.wav

就好了,当然只要一个局域网都可以访问,毕竟是把数据一次性直接传出去了。

但是有个很大的疑惑,我用的是python的Flask web框架,它推荐的音频流接口写法应该是这个

http://192.168.0.106:8000/audio?wav_name=audio.wav

但这个链接只能在本地服务器跑,换一个局域网的另机器就用不了了,有点奇怪。

posted @ 2021-12-24 17:27  赫凯  阅读(64)  评论(0)    收藏  举报