Node.jsでHTML5動画プレーヤーへのビデオストリーミングを実装し、シーク操作も正しく動作させる方法
Node.jsで動画ファイルをHTML5のvideo要素にストリーミング配信する場合、ファイル全体を一括で送信するのではなく、クライアントから要求された範囲(レンジ)だけを部分的に送信することが重要です。これにより、HTML5動画プレーヤーのシークバー(再生位置の移動)などのコントロールが引き続き正しく機能するようになります。
Rangeリクエストと206レスポンス
ブラウザの動画プレーヤーは、再生位置を移動したり、先頭の一部だけを先読みしたりするために、HTTPの「Rangeリクエスト」を利用します。サーバー側は要求された範囲のデータのみを返し、ステータスコード「206 Partial Content」で応答する必要があります。
createReadStreamを使った実装方法
fsモジュールのcreateReadStream()を呼び出すと、読み取り可能なストリーム(Readable Stream)が取得できます。このストリームを利用して、要求された部分だけをクライアントへ効率的に送信します。
サンプルコード
stream = fs.createReadStream(path);
stream.on('open', function () {
res.writeHead(206, {
"Content-Range": "bytes " + begin + "-" + end + "/" + total,
"Accept-Ranges": "bytes",
"Content-Length": chunksize,
"Content-Type": "video/mp4"
});
stream.pipe(res);
});
コードのポイント解説
- ステータスコード206: 部分コンテンツの応答であることを示します。Rangeリクエストへの対応には必須です。
- Content-Range: 送信するバイト範囲(begin〜end)とファイル全体のサイズ(total)をクライアントに伝えます。
- Accept-Ranges: サーバーがレンジリクエストに対応していることをブラウザに知らせます。
- Content-Length: 今回送信するチャンクのサイズ(chunksize)を指定します。
- Content-Type: 動画のMIMEタイプを指定します。MP4ファイルの場合は一般的に「video/mp4」を使用します。
begin・end・totalの求め方
上記コード内の変数begin、end、totalは、リクエストヘッダーの「Range」値を解析して事前に算出しておく必要があります。以下のように実装できます。
const stat = fs.statSync(path);
const total = stat.size;
const range = req.headers.range;
if (range) {
const parts = range.replace(/bytes=/, "").split("-");
const begin = parseInt(parts[0], 10);
const end = parts[1] ? parseInt(parts[1], 10) : total - 1;
const chunksize = (end - begin) + 1;
// ここで上記のストリーミング応答処理を呼び出す
}
この仕組みにより、ユーザーがシークバーをドラッグすると、その再生位置に必要なデータだけが要求・送信されます。そのため、サイズの大きな動画ファイルでもメモリを圧迫することなく、快適に再生できます。
-
【Windows 10】Windows Media Playerで動画のストリーミング速度を上げる方法
動画のストリーミングが遅いと、コンテンツの魅力が台無しになり、視聴体験も大きく損なわれてしまいます。デバイスがストリーミング動画を快適に再生できない原因はさまざまですが、内蔵アプリの動作が重いこともその一つです。この記事では、Windows 10環境でWindows Media Playerのストリーミング速度の問題を解消する具体的な方法を解説します。 Windows Media Playerのストリーミング速度を向上させるには そもそもストリーミング配信とは、大容量の動画ファイルをダウンロードし終わるのを待たずに視聴できる仕組みです。データは連続的なストリームとして送信され、受信しながら順次
-
Microsoftにも動画配信サービスがあった?Office 365の「Microsoft Stream」で動画共有を始める方法
ビジネスにおいて、動画の共有は欠かせない要素の一つです。従業員の研修、日々の情報発信、会議の録画など、さまざまな場面で動画を活用できるでしょう。動画共有といえばYouTubeを思い浮かべる方が多いかもしれませんが、実はMicrosoftにも企業向けの動画ストリーミングサービスが存在することをご存じでしょうか。その名も「Microsoft Stream」。多くのOffice 365(Microsoft 365)ビジネスプランに追加料金なしで含まれており、動画を安全かつプライベートにアップロードし、社内の同僚と共有することができます。本記事では、Microsoft Streamの基本的な使い方を初