完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,我正在尝试将pipeline_raw_http示例对接到flask 服务器上,按照server.py重构后的代码如下:
import datetimeimport wavefrom flask import Flask, request, Responseimport sysapp = Flask(__name__)def _get_chunk_size(): data = request.stream.read(2) print(type(data)) while data[-2:] != b"rn": data += request.stream.read(1) return int(data[:-2], 16)def _get_chunk_data( chunk_size): data = request.stream.read(chunk_size) request.stream.read(2) return datadef _write_wav( data, rates, bits, ch): t = datetime.datetime.utcnow() time = t.strftime('%Y%m%dT%H%M%SZ') filename = str.format('{}_{}_{}_{}.wav', time, rates, bits, ch) wavfile = wave.open(filename, 'wb') wavfile.setparams((ch, int(bits/8), rates, 0, 'NONE', 'NONE')) wavfile.writeframesraw(bytearray(data)) wavfile.close() return filename@app.route('/')def hello_world(): return 'Hello, World!'@app.route("/upload", methods=["POST"])def upload(): total_bytes = 0 sample_rates = 0 bits = 0 channel = 0 if request.headers.get('Transfer-Encoding').lower() == 'chunked': data = [] sample_rates = request.headers.get('x-audio-sample-rates', '').lower() bits = request.headers.get('x-audio-bits', '').lower() channel = request.headers.get('x-audio-channel', '').lower() sample_rates = request.headers.get('x-audio-sample-rates', '').lower() print("Audio information, sample rates: {}, bits: {}, channel(s): {}".format(sample_rates, bits, channel)) while True: chunk_size = _get_chunk_size() total_bytes += chunk_size print("Total bytes received: {}".format(total_bytes)) sys.stdout.write("�33[F") if (chunk_size == 0): break else: chunk_data = _get_chunk_data(chunk_size) data += chunk_data filename = _write_wav(data, int(sample_rates), int(bits), int(channel)) def generate(): yield 'File {} was written, size {}'.format(filename, total_bytes).encode('utf-8') response = Response(generate(), mimetype='text/html') response.status_code = 200 response.headers['Content-type'] = 'text/html;charset=utf-8' response.headers['Content-Length'] = str(total_bytes) return response if __name__ == '__main__': app.run(host='0.0.0.0', port=8000, debug=True) 然而当代码运行到 _get_chunk_size() 时,使用request.stream.read()并不能像server.py中使用rfile.read()一样获取到正确的chunksize,而是获取到了与server.py中_get_chunk_data( chunk_size)类似的16bit音频流,似乎在request.stream.read()运行时有一部分数据流被跳过了。 请问这是什么原因?除了使用http stream 以外还有什么办法能将音频传输到后端? |
|
相关推荐
1个回答
|
|
以下是我为您准备的Flask版本的代码示例:
1. 首先,确保您已经安装了Flask。如果还没有安装,请使用以下命令安装: ``` pip install Flask ``` 2. 接下来,创建一个新的Python文件,例如`app.py`,并将以下代码粘贴到文件中: ```python import datetime import wave from flask import Flask, request, Response import sys app = Flask(__name__) def _get_chunk_size(): data = request.stream.read(2) while data[-2:] != b"rn": data += request.stream.read(1) return int(data) @app.route('/pipeline_raw_http', methods=['POST']) def pipeline_raw_http(): chunk_size = _get_chunk_size() print("Chunk size:", chunk_size) # 读取音频数据 audio_data = request.stream.read(chunk_size) # 处理音频数据(这里可以添加您自己的处理逻辑) # 返回响应 return Response("Audio data received and processed", status=200) if __name__ == '__main__': app.run(debug=True) ``` 3. 保存文件并运行`app.py`: ``` python app.py ``` 4. 现在,您的Flask服务器已经启动并运行在默认端口5000上。您可以使用以下URL访问您的服务器: ``` http://127.0.0.1:5000/pipeline_raw_http ``` 请注意,这里只是一个基本的示例,您可以根据自己的需求添加音频处理逻辑和其他功能。希望这可以帮助您实现所需的功能!如果您有任何问题,请随时提问。 |
|
|
|
只有小组成员才能发言,加入小组>>
528浏览 6评论
438浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
425浏览 5评论
422浏览 4评论
398浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-8 06:27 , Processed in 0.734223 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号