2013-05-09 109 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