1. 程式人生 > >利用nodejs進行大檔案(比如線上視訊)的讀取

利用nodejs進行大檔案(比如線上視訊)的讀取

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屬性,因為必須分段讀取,如果加了這個屬性,瀏覽器就會以為請求結束了從而關閉請求。

好了,該說的都說完啦,轉載還請註明出處哦,謝謝各位!^_^~