[Kinesis Video Streams] (新機能)GetClip APIを使用するとストリームから一発でmp4が取得できるので超捗る
1 はじめに
CX事業本部の平内(SIN)です。
昨日、Amazon Kinesis Video Streams(以下、Kinesis Video Streams)で、新しいAPI(GetClip API)が利用可能になったとアナウンスがありました。
Amazon Kinesis Video Streams adds API support to easily retrieve media clips
これまで、Kinesis Video Streamsに保存されたデータを取得するためには、GetStreamsのようなAPIを利用して、フラグメント単位のデータを取得する方法しかありませんでした。また、取得したデータは、Matroska (MKV) 仕様となっており、一般に利用されるmp4などへは、改めて変換が必要でした。
GetClip APIを使用すると、いきなり、mp4が取得できるようになったとのことです。
2 AWS コンソールから利用する
GetClip APIがサポートされた事で、Kinesis Video Streamsのコンソール上で、Media playbackにDownload Clipというボタンが追加されました。
ボタンをクリックすると、次のようなダイアログが表示され、そのままDownloadをクリックするだけで、先頭から最大3分のmp4がダウンロードできます。
上記のダイアログで、Time rangeをStart and End timeに変更すると、取得する時間帯を指定できます。
時間指定(タイムスタンプ)は、Producer timestamp(データ送信側で記録した時間)と、Server timestamp(データ受信側で記録した時間)の2種類が選択できます。
注意書きにある通り、指定できる時間は、分単位であり、100MByte未満、200フラグメントに制限されています。
3 SDKから利用する
AWS SDK(AWS.KinesisVideoArchivedMedia)では、GetClipが追加されています。
Developer Guide - GetClip
Class: AWS.KinesisVideoArchivedMedia
下記は、データ取得してみたコードになります。 GetClipの前に、GET_CLIPを指定して、エンドポイントを取得する要領は、他のAPIと同じです。
const fs = require('fs'); const AWS = require("aws-sdk"); AWS.config.credentials = new AWS.SharedIniFileCredentials({ profile: 'developer' }); AWS.config.update({ region: 'ap-northeast-1' }); async function main(){ // 取得するストリーム const streamName = 'testStream'; const kinesisvideo = new AWS.KinesisVideo(); // EndPointで初期化して、KinesisVideoArchivedMediaを生成する const params = { APIName: "GET_CLIP", StreamName: streamName }; const e = await kinesisvideo.getDataEndpoint(params).promise(); const kinesisvideoarchivedmedia = new AWS.KinesisVideoArchivedMedia({endpoint: e.DataEndpoint}); // 2020/4/30 9:21:00 - 9:30:00の間のデータを取得する startTime = new Date(2020, 4 - 1, 30, 9, 21, 0); endTime = new Date(2020, 4 - 1, 30, 9, 30, 0); const params = { ClipFragmentSelector: { FragmentSelectorType: "PRODUCER_TIMESTAMP", TimestampRange: { EndTimestamp: endTime, StartTimestamp: startTime } }, StreamName: streamName // StreamName若しくは、StreamARNの指定が必須 }; const data = await kinesisvideoarchivedmedia.getClip(params).promise(); const filePath = "./test.mp4" fs.writeFileSync(filePath, data.Payload); } main()
4 最後に
今回、Kinesis Video Streamsに新しく追加された、GetClipについて確認してみました。
これまでのように、フラグメントを意識(理解)する必要がなくなったので、データ取得のハードルは一気に下がったように感じます。 また、コンソールから、軽易にmp4で取得出来るのは、色々と捗るのではないでしょうか。