python - 从 FastAPI 中的在线视频 URL 返回文件/流响应

标签 python video-streaming urllib fastapi streamingresponsebody

我正在使用 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/

相关文章:

android - 我可以将 exoplayer 缓冲数据发送到其他 Activity exoplayer

python - 使用 Python 登录网站,填写表格,然后退出

python - 如何让 python 读取 .txt 文件的每一行?

Python 仅在范围内时才输入除外

python - 添加特定日期之前的天数作为列

python - 尝试从 Github 安装 Python 包

iphone - 确定 MPMoviez Controller 比特率

video-streaming - 如何在桌面应用程序上使用 WebRTC?

python - 从Python中的URL调用的方法中检索图像

python - 无法在 Python 3.5 上安装 urllib.request