0

我在 Ubuntu 上使用 node.js 制作了 Web 服务器。

我想在播放器连接到网络服务器时显示视频。

索引.html

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

网络服务器.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);

    }); }

当我运行网络服务器并连接网络服务器时,视频没有在网络浏览器上播放。我只能看到黑匣子和视频控制栏。

但是,当我在 Ubuntu(未运行服务器)上打开 html 文件时,视频播放良好。

连接网络服务器后,如何在网络浏览器上播放视频?

谢谢 :)

4

2 回答 2

0

当浏览器请求/b.mp4您的 JavaScript 服务器时,它会获取index.html并将其发送到浏览器。

您需要注意所请求的 URL(可通过req对象获得)并为其提供适当的内容(使用适当的content-type响应标头)。

于 2015-09-06T09:07:05.973 回答
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 - 如果您想使用 require('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);

运行 webserver.js 后,输入http://localhost:8383/

于 2015-09-17T05:04:30.403 回答