python - 在多个设备上的 Flask 应用程序上提供视频时缓冲
问题描述
我创建了一个通过 Flask 应用程序提供两个视频的网站原型。我目前正在烧瓶的开发服务器中测试它们,但是在为超过 3 个设备提供服务时我面临缓冲问题(有时也有 3 个,但缓冲区大小的变化修复了它)。这是我的代码的样子:
def partial_response(path, start, end=None):
file_size = os.path.getsize(path)
if(end is None):
end = start + BUFF_SIZE - 1
end = min(end, file_size)
end = min(end, start + BUFF_SIZE - 1)
length = end - start + 1
#read file
with open(path, 'rb') as video_file:
video_file.seek(start)
bytes = video_file.read(length)
response = Response(
bytes,
206,
mimetype=mimetypes.guess_type(path)[0],
direct_passthrough=True
)
response.headers.add(
'Content-Range', 'bytes {0}-{1}/{2}'.format(start, end, file_size)
)
response.headers.add(
'Accept-Ranges', 'bytes'
)
return response
def get_range(req):
range = req.headers.get('Range')
print(range)
m = re.match('bytes=(?P<start>\d+)-(?P<end>\d+)?', range)
if(m):
start = int(m.group('start'))
end = m.group('end')
if end is not None:
end = int(end)
return [start, end]
else:
return [0, None]
@app.route("/two.mp4")
def two():
return render_template('watch_video.html', video_name="two.mp4")
@app.route("/static/videos/two.mp4")
def two_video():
start, end = get_range(request)
print(start, end)
return partial_response("p<ath to two.mp4>", start, end)
if(__name__ == "__main__"):
app.run(host='0.0.0.0')
缓冲可能是由于:
- 烧瓶及其阻塞API?
- 缓冲区大小?
- 主机的资源容量?
- 路由器限制?
- 只是糟糕的代码?
或者可能是别的什么?我需要一些指导。
预期设备数量:10
测试设备数量:5
测试视频大小:1GB
解决方案
推荐阅读
- angular - 子方法在父方法响应之前被调用
- amazon-web-services - 从 java 服务器上传到 S3 存储桶的多部分文件已损坏(即使在 API 网关中启用多部分/表单数据)
- android - 如何从 Kotlin 的列表中选择随机颜色?
- python - 删除 index%number == 0 的数据帧的所有行
- javascript - React/Jest - 测试 - 模拟点击事件对象
- python - 将数据框中的一列美元值转换为整数
- vb.net - 高级 DataGrid 视图过滤
- java - 为什么即使内存达到最大堆大小,JVM 也不会抛出内存不足错误?
- python - 在创建粘合表时使用 aws-cdk 中的现有数据库
- abap - 访问并将值分配到 Tabstrip 控件中包含的文本框中