我正在使用 FastAPI 从 googlevideo.com
返回视频响应。这是我正在使用的代码:
@app.get(params.api_video_route)
async def get_api_video(url=None):
def iter():
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as resp:
yield from io.BytesIO(resp.read())
return StreamingResponse(iter(), media_type="video/mp4")
但这不起作用
我希望将这个 Nodejs
转换为 Python FastAPI:
app.get("/download-video", function(req, res) {
http.get(decodeURIComponent(req.query.url), function(response) {
res.setHeader("Content-Length", response.headers["content-length"]);
if (response.statusCode >= 400)
res.status(500).send("Error");
response.on("data", function(chunk) { res.write(chunk); });
response.on("end", function() { res.end(); }); }); });
最佳答案
我遇到了类似的问题,但全部解决了。主要思想是使用 requests.Session() 创建一个 session ,并逐一生成一个 block ,而不是获取所有内容并立即生成它。这非常有效,根本不会产生任何内存问题。
@app.get(params.api_video_route)
async def get_api_video(url=None):
def iter():
session = requests.Session()
r = session.get(url, stream=True)
r.raise_for_status()
for chunk in r.iter_content(1024*1024):
yield chunk
return StreamingResponse(iter(), media_type="video/mp4")
关于python - 从 FastAPI 中的在线视频 URL 返回文件/流响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71395796/