✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。

🍎个人主页:算法工程师的学习日志


工作上需要搭建一个音频推送服务,考虑到使用python Flask搭建一个服务,下面给出简单的代码,代码中每次请求推送当前目录下的音频文件。


from flask import Flask
from flask import Response
import os




app = Flask(__name__)
folder = './video'




@app.route('/video/<file_key>')
def stream_mp3(file_key):
    def generate():
        path = os.path.join(folder, file_key)
        with open(path, 'rb') as video:
            data = video.read(1024)
            while data:
                yield data
                data = video.read(1024)


    return Response(generate(), mimetype="video")




if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

文件下面有2个视频文件供调试,

Python通过flask搭建音频流/文件服务_python

代码中读取文件每次读取1024字节,而不是一次全部读取到文件中,于是利用到了python 的 yield,为了简化问题,上面仅仅传递当前系统指定路径下的文件(实际工作中还有很多要处理,日志模块、视频处理分析等其他模块)

运行代码

Python通过flask搭建音频流/文件服务_ide_02

浏览器输入:

http://127.0.0.1:8080/video/1.mp4

则弹出视频页面。

Python通过flask搭建音频流/文件服务_flask_03

原创字数要达到300字就多写几句

Python通过flask搭建音频流/文件服务_ide_04

Flask

Flask 是一个微型的 Python 开发的 Web 框架,基于Werkzeug WSGI工具箱和Jinja2 模板引擎。Flask使用BSD授权。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。

示例代码:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

启动

$ pip install Flask
$ python hello.py
 * Running on http://localhost:5000/

特性

  • 内置开发用服务器和debugger
  • 集成单元测试(unit testing)
  • RESTful request dispatching
  • 使用Jinja2模板引擎
  • 支持secure cookies(client side sessions)
  • 100% WSGI 1.0兼容
  • Unicode based
  • 详细的文件、教学
  • Google App Engine兼容
  • 可用Extensions增加其他功能