2016-07-30 45 views
0

我開始一個node.js服務器,我試圖在客戶端播放視頻,在這種情況下瀏覽器和每次我嘗試播放視頻視頻播放但搜索欄不會緩衝,但如果您嘗試查找視頻,視頻將播放,只會將您發回到您已經在的位置。我的猜測是,writeHead寫入速度不夠緩衝,所以它是單向的,它在視頻播放之前不會緩衝。Node.js視頻不緩存但播放

服務器代碼片段video.mp4

case '/video.mp4': 
     fs.readFile(__dirname + path, function(error, data){ 
      if (error){ 
       response.writeHead(404); 
       response.write("oops this doesn't exist - 404"); 
       response.end(); 
      } 
      else{ 

       response.writeHead(200, {"Content-Type": "video/mp4", 'Transfer-Encoding': 'chunked'}); 
       response.write(data, "utf8"); 
       response.end(); 
      } 
     }); 
break; 

回答

0

你需要support byte range requests。請參閱SoundManager2的Technical Notes on the subject

字節服務在客戶端和服務器之間自動協商,並且提供了許多優於傳統下載的優點。最值得注意的是,Byte Serving更接近於「流式傳輸」技術,使客戶端能夠在知道持續時間後在文件內的任意位置尋找,緩衝和恢復播放。

示例請求:

GET 1a8fdf5d0433ed581bbcee74836b3305.mp4 HTTP/1.1 
Range: bytes=5210604-5275910 

預期的響應:

HTTP/1.1 206 Partial Content 
Accept-Ranges: bytes 
Content-length: 65307 
Content-Range: bytes 5210604-5275910/5275911 
Content-Type: video/mp4 
  1. 你似乎並沒有被髮送206 Partial Content狀態。
  2. 您沒有發送正確的Content-Range響應標題。
  3. 最後,如果客戶端發出一個超出範圍的範圍請求 - 也就是說,沒有一個範圍值與資源的範圍重疊 - 服務器應以416 Requested Range Not Satisfiable狀態響應。
+0

好吧,所以我有點困惑我不明白我需要具體但如果我是正確的我需要更改200到206,我需要有可接受的範圍,但我該怎麼做那? – frenchtoaster10

+0

@ frenchtoaster10爲了簡化它,我會推薦使用類似[send](https://www.npmjs.com/package/send)的東西。您基本上需要解析'Range'請求頭,它會告訴您客戶端需要的字節範圍,然後您只需發送請求資源的那些字節以及正確的狀態碼和響應頭。 – idbehold

+0

好吧,最後我得到我的代碼工作。但現在我使用發送它的工作了一段時間,但它現在停止工作任何想法我再次得到206錯誤? – frenchtoaster10