Python 无法向浏览器提供 mp4
Python cant serve mp4 to browser
我正在尝试从我的家庭 WAMP 服务器 (windows 8) 向浏览器提供视频文件,但浏览器一直显示错误 500,并且 Apache 日志显示格式错误 header 来自脚本 's.py':不好 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 网络应用程序通过您的 Apache 服务器提供视频服务,您必须构建一个 WSGI 应用程序并研究 mod_wsgi 才能提供服务 Python 使用 Apache 的应用程序。您也可以 运行 没有 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是现有视频的名称)
注意:您可以使用关键字参数 port and/or host:
编辑 APP.run()
- 端口:能够监听不同的端口。
APP.run(port=8000)
- host:侦听来自计算机外部的请求。
APP.run(host='0.0.0.0)
编辑:flask是一个需要安装的外部库。在网站上查找安装说明。简单版本:pip install flask
我只是 运行 遇到了完全相同的问题(使用 pdf 而不是 mp4)。您的原始代码很接近。问题是 sys.stdout.flush 需要在 sys.stdout.buffer.write 之前,以确保 headers 先出现。编辑后的代码如下,对我有用。
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")
sys.stdout.flush()
f=open(n, 'rb')
d=f.read()
sys.stdout.buffer.write(d)
f.close()
我正在尝试从我的家庭 WAMP 服务器 (windows 8) 向浏览器提供视频文件,但浏览器一直显示错误 500,并且 Apache 日志显示格式错误 header 来自脚本 's.py':不好 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 网络应用程序通过您的 Apache 服务器提供视频服务,您必须构建一个 WSGI 应用程序并研究 mod_wsgi 才能提供服务 Python 使用 Apache 的应用程序。您也可以 运行 没有 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是现有视频的名称)
注意:您可以使用关键字参数 port and/or host:
编辑APP.run()
- 端口:能够监听不同的端口。
APP.run(port=8000)
- host:侦听来自计算机外部的请求。
APP.run(host='0.0.0.0)
编辑:flask是一个需要安装的外部库。在网站上查找安装说明。简单版本:pip install flask
我只是 运行 遇到了完全相同的问题(使用 pdf 而不是 mp4)。您的原始代码很接近。问题是 sys.stdout.flush 需要在 sys.stdout.buffer.write 之前,以确保 headers 先出现。编辑后的代码如下,对我有用。
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")
sys.stdout.flush()
f=open(n, 'rb')
d=f.read()
sys.stdout.buffer.write(d)
f.close()