2013-05-09 7 views
5

के साथ स्ट्रीमिंग फाइलें मैं चेरीपी का उपयोग कर एक वीडियो फ़ाइल स्ट्रीम करने की कोशिश कर रहा हूं। जब मैं लोकहोस्ट पर जाता हूं: 8080/स्ट्रीम? वीडियो = video.avi यह डाउनलोड करना शुरू हो जाता है, लेकिन कुछ सेकंड बाद यह डाउनलोड को पूरा करता है चाहे फ़ाइल कितनी बड़ी हो। मैं इसके लिए नया हूं और यह नहीं पता कि यह ऐसा क्यों कर रहा है। इसके अलावा, अगर यह Matroska (.mkv) है तो यह फ़ाइल को क्यों पहचान नहीं सकता है?चेरीपी

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

संबंधित मुद्दे