2016-06-16 13 views
1

〜52MBのmp4ビデオファイルをnodejsサーバから配信しようとしています。以下に、ファイルを提供するために使用されるコードのスクリーンショットを添付します。 Code used to serve mp4 私は、mp4のMIMEタイプを含む静的ファイル呼び出し用のMIMEタイプのオブジェクトを持っています。Nodejsを使用してMP4ビデオファイルを配信する

var mimeTypes = { html: 'text/html; charset=utf-8', jpeg: 'image/jpeg', jpg: 'image/jpeg', png: 'image/png', js: 'text/javascript', css: 'text/css', mp4: 'video/mp4' };

私はクロームのページに移動しようとすると、しかし、私はエラーを取得する:

GET http://localhost:8888/videos/movie.mp4 net::ERR_INCOMPLETE_CHUNKED_ENCODING

は今(上記screenshotted)この同じロジックは、画像を提供するために使用され、しかし、mp4を提供しようとすると悲惨に失敗します。 Chromeのネットワークリクエストパネルを見ると、サーバーが200 OKステータスで応答し、ゼロバイトファイルが動画として配信されたことがわかります。ネットワーク要求のバイト範囲も疑わしいと思われますが、私は確かに知るために十分なHTTP要求について知りません。統計を見るとRequest Request_Abridged

は(fs.lstatから得て、下に示す)オブジェクト、しかし私が不完全なチャンクエンコーディングを得続ける、ファイルが4096バイトのチャンクに分割する方法を「知っている」ことが表示されますエラー。私はアンチウィルスを持っていないし、別のブラウザを使ってChromeのさまざまな設定を無効にしようとしましたが、ビデオが見えません。

{"dev":16777220,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4096,"ino":1070608,"size":51246445,"blocks":100096,"atime":"2016-06-15T23:06:27.000Z","mtime":"2016-06-15T21:41:00.000Z","ctime":"2016-06-15T21:45:56.000Z"}

私が行方不明ですヘッダーはありますか?どういうわけか私は応答をあまりにも早く終わらせますか?私は今は無知だ。

+0

[コードのスクリーンショットを投稿しない](http://meta.stackoverflow.com/q/303812/201952)。実際のコードをコピーして貼り付け、[正しくフォーマットする](http://stackoverflow.com/editing-help#code)を参照してください。 – josh3736

答えて

0

`

if (stats.isFile()) { 
    var extension = path.extname(file).split('.').reverse()[0]; 
    if (extension === 'mp4') { 
     // gotta chunk the response if serving an mp4 
     var range = req.headers.range; 
     var parts = range.replace(/bytes=/, "").split("-"); 
     var partialstart = parts[0]; 
     var partialend = parts[1]; 
     var total = stats.size; 
     var start = parseInt(partialstart, 10); 
     var end = partialend ? parseInt(partialend, 10) : total - 1; 
     var chunksize = (end - start) + 1; 
     var mimeType = mimeTypes[extension] || 'text/plain; charset=utf-8'; 
     res.writeHead(206, {    
     'Content-Range': 'bytes ' + start + '-' + end + '/' + total, 
     'Accept-Ranges': 'bytes', 
     'Content-Length': chunksize, 
     'Content-Type': mimeType 
     }); 
     var fileStream = fs.createReadStream(file, { 
      start: start, 
      end: end 
     }); 
     fileStream.pipe(res); 
     res.on('close', function() { 
     console.log('response closed'); 
     if (res.fileStream) { 
      res.fileStream.unpipe(this); 
      if (this.fileStream.fd) { 
       fs.close(this.fileStream.fd); 
      } 
     } 
     }); 
    } else { 
     var mimeType = mimeTypes[extension] || 'text/plain; charset=utf-8'; 
     res.writeHead(200, {'Content-Type': mimeType}); 
     var fileStream = fs.createReadStream(file); 
     fileStream.pipe(res); 
    } 

    return; 
    } 

`

関連する問題