ビデオファイルを提供するためにサードパーティのオブジェクトストア(SoftLayer)に依存するWebアプリケーションがあります。ユーザーがビデオをリクエストすると、node.js-serverがオブジェクトストアからファイルをフェッチしてクライアントにストリーミングします。デスクトップマシンのAndroidとFirefoxおよびChromeのブラウザで機能するコードがあります。残念ながら、ビデオはSafari / iOSでは再生されません。
node.js-code(w3c-websiteからビデオをストリーミングする)の簡略化されたバージョンは次のようになります。
router.get('/testFile', function (req, res) {
var range = req.headers.range;
var positions = range.replace(/bytes=/, "").split("-");
var start = parseInt(positions[0], 10);
var objectPath = "http://www.w3schools.com/html/mov_bbb.mp4"
request.get({
url: objectPath,
headers: {},
encoding: null
}, function (err, data) {
if (err) {
console.log('error', err);
}else {
var total = data.body.length;
var end = positions[1] ? parseInt(positions[1], 10) : total - 1;
var chunksize = (end - start) + 1;
console.log("bytes " + start + "-" + end + "/" + total);
res.writeHead(206, {
"Content-Range": "bytes " + start + "-" + end + "/" + total,
"Accept-Ranges" : "bytes",
"Content-Length": chunksize
});
var bodyStream = new streambuffers.ReadableStreamBuffer({
frequency: 1,
chunksize: 256
});
bodyStream.pipe(res);
bodyStream.put(data.body);
}
});
});
'/ testFile'は、HTML5ビデオプレーヤーのsrcとして使用されます。
<!DOCTYPE html>
<html>
<head>
<title>Movie</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>Test video</h1>
<video controls="true" preload="none">
<source src="/testFile" type="video/mp4"/>
</video>
</body>
</html>
この単純なプロジェクトはここでチェックアウトできます:https://bitbucket.org/Duffman/stream-video
実行するには、「node bin / www」を実行し、「http:// localhost:3000 / testVideo」にアクセスします。
ノード内にストリーミングメディアサーバーを自分で再作成しようとはしません。
お持ちのコードを使用して、アプリケーション・サーバーは最初にSoftLayerからファイル全体をダウンロードし、次にそれをRAMからクライアントにストリーミングします。これは、多数のファイルまたはクライアントのどちらにとっても持続可能ではありません。
サーバーがブリュッセルにある場合、異なる大陸のすべてのクライアントで転送が遅くなります。モバイルネットワークでは特に苦痛になります。モバイルネットワークでは、おそらく最適なパフォーマンスが必要になります。
仕事に最適なツールを使用してください。数行のノードで可能な限り最高のストリーミングメディアサーバーを作成するつもりはありません。これを解決するには、NGINXなどの専用HTTPサーバーを信頼してください。さらに、あなたが書かなかったコードにバグがあってはなりません。
SoftLayerCDNを使用します。それはあなたの問題を解決するために特別に作られています。注:私は彼らと提携していません。コンテンツがS3にある場合は、CloudFrontを使用することをお勧めします。ここで重要なのは、ビデオのストリーミングにCDNを使用することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加