2013-05-09 51 views
5

我想用樱桃流式传输视频文件。当我去localhost:8080/stream?video = video.avi它开始下载,但几秒钟后它就“完成”下载,无论文件有多大。我对此很新,并且无法找出它为什么这样做。另外,如果它是Matroska(.mkv),它甚至不会识别该文件?用樱桃流式传输文件

这里是我的Stream类:

class Stream(object): 
@cherrypy.expose 
def default(self, video=None): 
    BASE_PATH = ".." 
    video = os.path.join(BASE_PATH, video) 
    if video == None: 
     return "no file specified!" 
    if not os.path.exists(video): 
     return "file not found!" 
    f = open(video) 
    size = os.path.getsize(video) 
    mime = mimetypes.guess_type(video)[0] 
    print(mime) 
    cherrypy.response.headers["Content-Type"] = mime 
    cherrypy.response.headers["Content-Disposition"] = 'attachment; filename="%s"' % os.path.basename(video) 
    cherrypy.response.headers["Content-Length"] = size 

    BUF_SIZE = 1024 * 5 

    def stream(): 
     data = f.read(BUF_SIZE) 
     while len(data) > 0: 
      yield data 
      data = f.read(BUF_SIZE) 

    return stream() 
default._cp_config = {'response.stream': True} 

回答

2

我意识到,所有我需要做的是改变开(视频)开(视频,“RB”),因此,它会读取二进制文件模式。之后,文件完全下载并工作。

+0

做类似的事情。在缓冲时也得到一种停止,也不知道如何在缓冲区大小满足后继续下载源。 – Twisty 2013-12-30 18:27:16