概要
OCIのObjectStorageにあるデータをNode.JSのOCI SDKを使用して取得するサンプルを紹介します。
本稿では例として大容量動画データをHLS形式でObjectStorageに保存し、
ReadableStreamと再起処理を使用してクライアントにObjectStorageデータを返却する簡易Webサーバを作成しました。
準備
HLS形式データの保存とデータ配信
こちらの記事にある通り、Digital Media Servicesを使用することで動画コンテンツの作成&配信までおこなえます。
一方、SaaS観点では、より柔軟に配信Webサーバ側で、
- 独自の認証機能を付与したり
- または各データ配信単位で細かい追加処理(データ加工やAPI連携など)
を実施したいケースがあります。
配信部分を独自実装することで、より柔軟なサーバ実装が可能となり、
ブレークポイント指定して容易にローカル環境で都度デバッグが行えることも魅力です。
本稿では、検証用にNode.jsで動く簡易なWebサーバを作成しました。
Digital Media Servicesとの連携では、OCI Media Flowを使用してObjectStorageに動画コンテンツを保存し、
データ配信部分を今回作成した検証用Webサーバを使用します。
作成したサンプルではnodeコマンドでlocalhost:8080にてサーバを起動し、
クライアントアプリケーションからは対象のファイル(m3u8ファイル等)を指定します。
node .\HttpServer.js
play("http://localhost:8080/master.m3u8");
Node.js版OCI SDKの取得
Node.jsをinstall後、
ローカルの開発環境でDLする場合も基本的には下記コマンドを対象フォルダ内で実行するのみでnode_modeuleフォルダに格納されます。
npm install oci-sdk
実装
ソースはこちらにアップしました。
HLS形式での動画配信では、インデックスファイルのm3u8ファイル内において、同一ファイルに対してバイトレンジを指定して複数リクエストに分割して取得する記述があります。
例えば下記のように1リクエストごとにhttpヘッダでバイトレンジを指定し、サーバ側はその該当部分のデータを返却します。
Range: bytes=847-4979123
そのため、本検証用WebサーバにおいてもRangeヘッダを解釈し、該当部分のバイト配列のみを返却する実装をしています。
また動画コンテンツのサイズの大きいデータはストリーム形式でデータが取得されるため、再帰処理も必要となります。
おわりに
Node.jsを使用してObjectStorageから大容量データをReadableStreamで処理して返却する簡易Webサーバを作成しました。
localhostで動かせるため、ブレークポイントを設置してデバッグも容易にできるため、開発時に重宝します。
またlocalhostだけでなく、本サンプルをベースに加工して、OCIのコンピュートインスタンスに載せることも可能です。
参考になれば幸いです。