2013-05-09 2 views
5

Я пытаюсь передать видео файл с помощью cherrypy. Когда я перехожу на localhost: 8080/stream? Video = video.avi, он начинает загрузку, но через несколько секунд он просто «завершает» загрузку независимо от того, насколько большой файл. Я довольно новичок в этом и не могу понять, почему это делается. Кроме того, почему он даже не распознает файл, если это Matroska (.mkv)?Потоковые файлы с cherrypy

Вот мой класс потока:

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

я понял, что все, что мне нужно было сделать, чтобы изменить открытое (видео), чтобы открыть (видео, «гь»), так что он будет читать файл в двоичном Режим. После этого файл загрузился полностью и работал.

+0

Выполнение чего-то подобного. Кроме того, получение некоторой остановки при буферизации, а также не уверен, как продолжить загрузку источника после того, как размер буфера будет удовлетворен. – Twisty

Смежные вопросы