Javascript node.js中的视频流

Javascript node.js中的视频流,javascript,node.js,video,streaming,video-streaming,Javascript,Node.js,Video,Streaming,Video Streaming,我想使用node.js流式传输视频。我跟着。从当地的情况来看,它工作得很好。但我需要从网络上传输视频 我的要求有点不同。我必须从源代码中隐藏原始URL。因此,我需要显示自己的URL,而不是显示原始URL,如。而不是显示 使用以下代码 var indexPage, movie_webm, movie_mp4, movie_ogg; fs.readFile(path.resolve(__dirname,"ANY_LOCAL_VIDEO.mp4"), function (err, data) {

我想使用node.js流式传输视频。我跟着。从当地的情况来看,它工作得很好。但我需要从网络上传输视频

我的要求有点不同。我必须从源代码中隐藏原始URL。因此,我需要显示自己的URL,而不是显示原始URL,如
。而不是显示

使用以下代码

var indexPage, movie_webm, movie_mp4, movie_ogg;
fs.readFile(path.resolve(__dirname,"ANY_LOCAL_VIDEO.mp4"), function (err, data) {
    if (err) {
        throw err;
    }
    console.log(data.length);
    movie_mp4 = data;
});

http.createServer(function (req, res) {
    var reqResource = url.parse(req.url).pathname;
    var total;
    total = movie_mp4.length;
    var range = req.headers.range;  
    var positions = range.replace(/bytes=/, "").split("-");
    var start = parseInt(positions[0], 10); 
    var end = positions[1] ? parseInt(positions[1], 10) : total - 1;
    var chunksize = (end-start)+1;
    res.writeHead(206, { "Content-Range": "bytes " + start + "-" + end + "/" + total, 
                         "Accept-Ranges": "bytes",
                         "Content-Length": chunksize,
                         "Content-Type":"video/mp4"});
    res.end(movie_mp4.slice(start, end+1), "binary");

}).listen(8888); 
对于本地视频来说,它工作得很好。但是如果我给出
fs.readFile(“http://goo.gl/KgGx0s“,函数(err,data){
而不是上面的代码它不工作。我尝试将
fs.readFile
更改为
fs.filepath
,但仍然不工作。我收到了此错误。”

c:\git\personal\streaming-video-html5\server.js:13
        throw err;
              ^
Error: ENOENT, open 'c:\git\personal\streaming-video-html5\http:\goo.gl\KgGx0s'

这可能是因为路径正在改变。我应该采取什么方法?可能吗?

您正在寻找的是类似于

您只需获取远程视频,然后将其直接传送到您的响应

我要做的是首先向远程视频发出
HEAD
请求,以确认它接受字节范围,并获取视频的内容长度

一旦获得该信息,您就可以设置响应头,HTTP状态代码为
206
,表示这是部分响应

既然您已经编写了响应头,那么您就创建了一个到远程视频的请求,沿着原始请求中的字节范围发送,并通过管道直接发送到您的响应(
res

您可能可以缓存来自
HEAD
请求的响应,这样就不必每次请求一个字节范围时都这样做

var fileUrl = 'https://ia800300.us.archive.org/1/items/night_of_the_living_dead/night_of_the_living_dead_512kb.mp4';

var range = req.headers.range;
var positions, start, end, total, chunksize;

// HEAD request for file metadata
request({
  url: fileUrl,
  method: 'HEAD'
}, function(error, response, body){
  setResponseHeaders(response.headers);
  pipeToResponse();
});

function setResponseHeaders(headers){
  positions = range.replace(/bytes=/, "").split("-");
  start = parseInt(positions[0], 10); 
  total = headers['content-length'];
  end = positions[1] ? parseInt(positions[1], 10) : total - 1;
  chunksize = (end-start)+1;

  res.writeHead(206, { 
    "Content-Range": "bytes " + start + "-" + end + "/" + total, 
    "Accept-Ranges": "bytes",
    "Content-Length": chunksize,
    "Content-Type":"video/mp4"
  });
}

function pipeToResponse() {
  var options = {
    url: fileUrl,
    headers: {
      range: "bytes=" + start + "-" + end,
      connection: 'keep-alive'
    }
  };

  request(options).pipe(res);
}