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

时间:2017-08-22 09:22:48

标签: python pyramid zodb

我使用Pyramid和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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

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

相关问题