2015-09-05 101 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/