2014-04-30 83 views
0

我想要流從的node.js服務器中的MP3,但我不能接受任何數據,或者,如果我刷新我的客戶端頁面,我得到一個跨起源錯誤如何從node.js獲取音頻流?

我的服務器代碼是這樣的:

fs.readFile(path, function(error, file) { 
    if (error) { 
     response.writeHead(500, {"Content-Type": "text/plain"}); 
     response.write(error + "\n"); 
     response.end(); 
    } else { 
     console.log('file ok'); 

     var stat = fs.statSync(path); 
     var total = stat.size; 
     console.log('video size: ' + total); 
     var origin = (request.headers.origin || "*"); 
     if (request.headers['range']) { 
      var range = request.headers.range; 
      console.log('range: ' + range); 
      var parts = range.replace(/bytes=/, "").split("-"); 
      console.log('parts: ' + parts); 
      var partialstart = parts[0]; 
      console.log('partialstart: ' + partialstart); 
      var partialend = parts[1]; 
      console.log('partialend: ' + partialend); 

      var start = parseInt(partialstart, 10); 
      var end = partialend ? parseInt(partialend, 10) : total - 1; 
      var chunksize = (end-start) + 1; 
      console.log('RANGE: ' + start + ' - ' + end + ' = ' + chunksize); 

      var fileStr = fs.createReadStream(path, {start: start, end: end}); 
      response.writeHead(
       "200", 
       "OK", 
       { 
        "Access-Control-Allow-Credentials": true, 
        "Access-Control-Allow-Origin": origin, 
        "Content-Type": 'audio/mp3', 
        "Access-Control-Max-Age": 60*60*24*365, // Seconds. 
        "Access-Control-Allow-Methods": "GET,PUT,POST,DELETE", 
        "Access-Control-Allow-Headers": "Content-Type", 
        "Content-Range": "bytes " + start + "-" + end + "/" + total, 
        "Accept-Ranges": "bytes", 
        "Content-Length": chunksize 
       } 
      ); 
      //response.writeHead(206, { 'Content-Range': 'bytes ' + start + '-' + end + '/' + total, 'Accept-Ranges': 'bytes', 'Content-Length': chunksize, 'Content-Type': 'audio/mpeg' }); 
      fileStr.pipe(response); 
     } else { 
      console.log('ALL: ' + total); 
      response.writeHead(
       "200", 
       "OK", 
       { 
        "Access-Control-Allow-Credentials": true, 
        "Access-Control-Allow-Origin": origin, 
        "Content-Type": "audio/mp3", 
        "Content-Length": file.length, 
        "Access-Control-Max-Age": 60*60*24*365, // Seconds. 
        "Access-Control-Allow-Methods": "GET,PUT,POST,DELETE", 
        "Access-Control-Allow-Headers": "Content-Type" 
       } 
      ); 
      fs.createReadStream(path).pipe(response); 
      //response.end(html); 
      response.end(html); 
      console.log('-end-'); 
     } 
    } 
}); 

我一直到達末尾 - 但沒有數據到達客戶端..

於Node.js和JXcore

回答