4

現在ドライブにダウンロード中のビデオ ファイルをストリーミングするプログラムを作成しています。私が抱えている問題は、ブラウザで実際にビデオを再生することです。スクリプトはファイルの変更をリッスンし、残りをストリーミングしますが、ブラウザは空白のビデオ ページを表示する以外には何もしません。

var fs          = require('fs'),
    http        = require('http'),
    filename    = '/home/qrpike/Videos/topgears.mp4';

http.createServer(function (req, res) {

    console.log(req.url);
    if( req.url == '/video.mp4'){

        res.writeHead(200,{
            'Content-Type'          : 'video/mp4',
            'Cache-Control'         : 'public',
            'Connection'            : 'keep-alive',
            'Content-Disposition'   : 'inline; filename=topgears.mp4;',
            'Content-Transfer-Encoding' : 'binary',
            'Transfer-Encoding'     : 'chunked'
        });

        fs.open(filename, 'r', function(err, fd) {

            if (err) throw new Error('Could not open file');
            var position = 0;

            fs.stat(filename, read);
            fs.watchFile(filename, read.bind(null, null));

            function read(err, stat) {

                var delta = stat.size - position;
                if (delta <= 0) return;

                fs.read(fd, new Buffer(delta), 0, delta, position, function(err, bytes, buffer) {

                    console.log("err", err, "bytes", bytes, "position",position,"delta",delta);
                    res.write(buffer.toString('binary'));

                });

                position = stat.size;

            } 

        });

    }

}).listen(1337);
console.log('Server running at http://127.0.0.1:1337/');
4

1 に答える 1

2

したがって、この答えは、理論的にはあなたが望むことを行うGrowing-fileに依存します。私の懸念は、このプロジェクトが 2 年間コミットされていないことです。そのため、まだ機能するかどうかわかりません。そうは言っても、これはローカルで機能しました(ただし、ビデオファイルへのパイピングはテストしていません):

var fs = require('fs');
var http = require('http');
var GrowingFile = require('growing-file');

var FILENAME = '/home/dave/Desktop/video/video.ogg';

var server = http.createServer(function(req, res) {
  var file;
  if (req.url === '/video.ogg') {
    res.writeHead(200, {
      'Content-Type': 'video/ogg'
    });
    file = GrowingFile.open(FILENAME);
    file.pipe(res);
  } else {
    res.statusCode = 404;
    res.end('Not Found');
  }
});

server.listen(1337);
于 2013-02-06T23:15:09.267 に答える