如何在不下载整个视频的情况下提供视频响应浏览器



我正在使用带有ZODB的金字塔作为数据库存储。我想返回视频响应,我可以,但唯一的问题是浏览器下载整个视频然后播放它,我不希望这种情况发生。我想流式传输视频,但找不到任何合适的解决方案。 这是我的代码

返回视频响应的函数为:

@view_config(context=Content, name='getcontentplay')
def getContentImage(context,request):
blob = context.blobdata
resp = Response(content_disposition="inline; filename=""+blob.filename.encode('utf-8')+""",content_type=blob.contentType,)
resp.app_iter = blob.data
resp.content_length = blob.size
return resp

Blob 存储类为:

from ZODB.blob import Blob
from persistent import Persistent
class BlobWrapper(Persistent):
def __init__(self, filedata,contentType,filename):
self.contentType = contentType
self._blob = Blob(filedata)
self.filename = filename
def _getData(self):
fp = self._blob.open('r')
data = fp.read()
fp.close()
return data
def retFile(self):
return self._blob.open('r')
data = property(_getData)
@property
def size(self):
if 'size' in self.__dict__:
return self.__dict__['size']
reader = self._blob.open()
reader.seek(0,2)
size = int(reader.tell())
reader.seek(0)
reader.close()
self.__dict__['size'] = size
return size
def getSize(self):
return self.size

我的 HTML 模板代码是

<video   poster="/static/images/kid.png" controls controlsList="nodownload" preload="none">
<source src="${urltovideo}" />
</video>

您询问如何获得分块/流式响应,其详细信息完全取决于您的 wsgi 服务器以及 wsgi 服务器和客户端浏览器之间的任何其他服务器/代理。例如,默认情况下,nginx将在将响应发送到客户端之前缓冲来自其上游的整个响应。此外,许多WSGI服务器会在一定程度上做同样的事情,您需要查看它们的设置,了解如何调整缓冲。

最新更新