fastapi对视频播放加速方法

from fastapi import FastAPI, Request, HTTPException, Query

from fastapi.responses import StreamingResponse

import os

import aiofiles

app = FastAPI()

@app.get("/video")

async def stream_video(request: Request, name: str = Query(..., description="Name of the video file")):

file_path = f"videos/{name}"

if not os.path.isfile(file_path):

raise HTTPException(status_code=404, detail="Video not found")

file_size = os.path.getsize(file_path)

range_header = request.headers.get('Range')

start, end = parse_range_header(range_header, file_size)

async def iterfile(file_path, start: int, end: int):

async with aiofiles.open(file_path, mode='rb') as file:

await file.seek(start)

yield await file.read(end - start + 1)

headers = {

'Content-Range': f'bytes {start}-{end}/{file_size}',

'Accept-Ranges': 'bytes',

'Content-Length': str(end - start + 1),

'Content-Type': 'video/mp4',

}

return StreamingResponse(iterfile(file_path, start, end), headers=headers, status_code=206)

def parse_range_header(range_header: str, file_size: int):

if range_header is None:

return 0, file_size - 1

ranges = range_header.strip().split("=")[-1]

start, end = ranges.split("-")

start = int(start) if start else 0

end = int(end) if end else file_size - 1

if start >= file_size or end >= file_size or start > end:

raise HTTPException(status_code=416, detail="Requested Range Not Satisfiable")

return start, end

if name == "main":

import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)

相关推荐
千航@abc11 小时前
Win10/Win11 DCOM服务器进程启动器 CPU 占用过高解决方法
运维·安全·病毒·window10·window11·dcom进程·系统进程资源占用高
API开发11 小时前
CentOS 单独安装Docker Compose v2
linux·docker·centos·docker compose
hwj运维之路11 小时前
Docker面试题汇总系列
运维·docker·云原生·容器
蜡笔小炘11 小时前
LVS -- 部署NAT模式集群案例
linux·运维·服务器·lvs
翼龙云_cloud11 小时前
阿里云渠道商:如何优化阿里云弹性伸缩的性能?
服务器·阿里云·云计算
我怎么又饿了呀11 小时前
CentOs 10 虚拟机安装【解决方法】VMware无法打开内核设备,未能启动虚拟机
linux·运维·centos
H Journey11 小时前
Centos与Ubuntu差异总结
linux·ubuntu·centos
阿拉伯柠檬11 小时前
Git原理与使用(一)
大数据·linux·git·elasticsearch·面试
冰冰的coco11 小时前
如何设置需要sudo的命令开机自启动
linux·运维·服务器
辞旧 lekkk11 小时前
【Linux】Linux进程控制(三)自主实现简易shell命令行解释器
linux·运维·服务器·学习·萌新