利用nodejs進行大檔案(比如線上視訊)的讀取
阿新 • • 發佈:2019-01-25
nodejs進行視訊讀取時不能像讀取圖片之類的一次性讀取,而是必須讀取一部分返回一部分,這樣客戶端的播放才會邊緩衝邊播放,而不必等待全部緩衝完再播放。
老規矩,直接貼程式碼講解:
<span style="white-space:pre"> </span>var fs = require('fs'); function readBigFileEntry(filename, response) { path.exists(filename, function(exists) { if (!filename || !exists) { response.writeHead(404); response.end(); return; } var readStream = fs.ReadStream(filename); var contentType = 'none'; var ext = path.extname(filename); switch (ext) { case ".flv": contentType = "video/flv"; break; } response.writeHead(200, { 'Content-Type' : contentType, 'Accept-Ranges' : 'bytes', 'Server' : 'Microsoft-IIS/7.5', 'X-Powered-By' : 'ASP.NET' }); readStream.on('close', function() { response.end(); console.log("Stream finished."); }); readStream.pipe(response); }); }
通過fs模組的ReadStream方法,拿到視訊流,然後繫結關閉事件:當流讀取到結尾的時候結束response請求,最後通過pipe方法進行小塊小塊的讀取。這裡的head資訊不能新增Content-Length屬性,因為必須分段讀取,如果加了這個屬性,瀏覽器就會以為請求結束了從而關閉請求。
好了,該說的都說完啦,轉載還請註明出處哦,謝謝各位!^_^~