2015-09-05 54 views
-1

我在Ubuntu上使用node.js製作了web服務器。當我連接網絡服務器時,如何在網絡瀏覽器上播放視頻?

我想播放視頻當播放器與網絡服務器連接時。

的index.html

<html> 
<body> 
    <video width='400' controls> 
    <source src='b.mp4' type='video.mp4'> 
    </video> 
</body> 
</html> 

webserver.js

var app = require('http').createServer(handler) 
     , fs=require('fs'); 

    app.listen(1233); 

    function handler(req, res){ 
    rs.readFile(__dirname + '/index.html', 
    function(err,data){ 
     if(err){ 
     res.writeHead(500); 
     return res.end('Error loading index.html'); 
     } 
    res.writeHead(200); 
    res.end(data); 

    }); } 

當我運行的Web服務器和連接的網絡服務器,視頻並沒有在網頁瀏覽器中播放。我只能看到黑匣子和視頻控制欄。

但是,當我在Ubuntu(不運行服務器)上打開html文件時,視頻播放效果不錯。

當我連接網絡服務器時,如何在網絡瀏覽器上播放視頻?

謝謝:)

回答

0

當瀏覽器請求/b.mp4你的JavaScript服務器獲取index.html並將其發送給瀏覽器。

您需要注意所請求的URL(可通過req對象獲得)併爲其提供適當的內容(使用適當的content-type響應標頭)。

0

我已經開始使用Node.JS最近。我想解決你的第二個最後一行

「當我連接網絡服務器時,如何在網絡瀏覽器上播放視頻?」

到目前爲止,我已經找到了兩種方法來使用nodejs服務器在客戶端的瀏覽器上呈現視頻/音頻。我將爲這兩種方式共享代碼。

一種方法是在準備播放視頻播放器的情況下,在客戶端瀏覽器中加載HTML頁面(index.html,其中視頻已使用標籤嵌入)。第二種方法是直接將視頻作爲服務器的響應發送到您的網絡瀏覽器。後一種方法可能需要也可能不需要HTML,這取決於你真正想要實現的方式。

我不想使用像1233那樣的小端口號,而是希望在網絡方面公正,並且假設我們要使用8383端口號。

方法1:渲染一個已經嵌入視頻播放器的HTML頁面。我正在考慮您的webserver.js和index.html文件駐留在同一個目錄中。這裏是東西,將滿足您的需求 -

var express = require('express'); 
var app = express(); 

app.use(express.static(__dirname + '/')); 

var ipAddress = process.env.OPENSHIFT_NODEJS_IP; 
var port = process.env.OPENSHIFT_NODEJS_PORT || 8383; 

app.listen(port, ipAddress); 

運行您webserver.js然後鍵入您的瀏覽器http://localhost:8383/index.html

方法2 - 如果你想實現它使用要求(「HTTP」),然後使用下面的代碼 -

var http = require('http'); 
fileSystem = require('fs'), 
path = require('path'); 
util = require('util'); 

http.createServer(function (req, response) { 
    var filePath = path.join('./', 'b.mp4'); 
    var stat = fileSystem.statSync(filePath); 

    response.writeHead(200, { 
     "Content-Type": "video/mpeg", 
     "content-size": stat.size 
    }); 

    var readStream = fileSystem.createReadStream(filePath); 

    readStream.on('data', function (data) { 
     var flushed = response.write(data); 
     // Pause the read stream when the write stream gets saturated 
     if (!flushed) 
      readStream.pause(); 
    }); 

    response.on('drain', function() { 
     // Resume the read stream when the write stream gets hungry 
     readStream.resume(); 
    }); 

    readStream.on('end', function() { 
     response.end(); 
    }); 

}).listen(8383); 

運行您的Web服務器後。js,型號http://localhost:8383/