我尝试从我的家庭 WAMP 服务器(Windows 8)向浏览器提供视频文件,但浏览器不断给出错误 500,并且 apache 日志显示脚本“s.py”中的格式错误的 header :错误 header : G@
“s.py”是我的 python 3.4 版本脚本
n="\\wamp\\www\\r.mp4"
print ("Last-Modified: Fri, 24 Apr 2015 22:09:52 GMT")
print ("Accept-Ranges: bytes")
print ("Content-Length:", os.path.getsize(n))
print ("Content-type: video/mp4\r\n\r\n")
f=open(n, 'rb')
d=f.read()
sys.stdout.buffer.write(d)
sys.stdout.flush()
f.close()
我可以使用浏览器在服务器上运行其他简单的Python脚本,所以我知道这是有效的,但由于某种原因它不会提供这个mp4文件。
在浏览器中,我使用 URL“localhost/s.py”调用它,然后它只会给出错误 500,并且服务器日志显示格式错误的 header 。
我一整天都在研究这个问题,任何人都知道如何解决它,
谢谢
最佳答案
Python 可用于向您的浏览器提供 MP4 服务。但是您不能将 Python 脚本扔到 WAMP 服务器,就像它是 PHP 脚本一样。
如果您打算让 Python Web 应用程序通过 Apache 服务器提供视频服务,则必须构建 WSGI 应用程序并研究 mod_wsgi 以便能够通过 Apache 为 Python 应用程序提供服务。您还可以在没有 Apache 的情况下运行 WSGI 应用程序。
用于从目录提供 mp4 视频的过于简化的 WSGI 应用程序可能是:
import os
from flask import Flask, send_file, make_response
APP = Flask(__name__)
MEDIA_PATH = '/path/to/your/media/directory'
@APP.route('/<vid_name>')
def serve_video(vid_name):
vid_path = os.path.join(MEDIA_PATH, vid_name)
resp = make_response(send_file(vid_path, 'video/mp4'))
resp.headers['Content-Disposition'] = 'inline'
return resp
if __name__ == '__main__':
APP.run()
使用保存视频的目录的完整路径编辑 MEDIA_PATH。
将此脚本保存为 video_server.py(例如)。
运行此脚本
python video_server.py
通过浏览器访问 localhost:5000/some_video.mp4(其中 some_vdeo.mp4 是现有视频的名称)
注意:您可以使用关键字参数端口和/或主机编辑 APP.run()
:
- 端口:能够监听不同的端口。
APP.run(端口=8000)
- 主机:监听来自计算机外部的请求。
APP.run(host='0.0.0.0)
编辑:flask是需要安装的外部库。在网站上查找安装说明。简单版本:pip installflask
关于Python 无法向浏览器提供 mp4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44621359/