[UPDATE] Amazon IVSのS3への録画機能で高頻度サムネイルをサポートしました!
はじめに
清水です。本エントリでお伝えするアップデート情報はこちら!AWSのマネージド型ライブストリーミングソリューションであるAmazon Interactive Video Service (Amazon IVS)で録画機能(Record to S3: R2S3)がアップデートされ、取得間隔がより短くなるなどサムネイル画像に関する強化(高頻度サムネイル)が行われました。(2023/07/17付でAWS What's Newにポストされたアップデート情報となります。)
なお、上記AWS What's Newのポストでは、このIVS R2S3の高頻度サムネイル機能に加え、rendition filteringについても扱っていますが、本ブログエントリでは高頻度サムネイル機能のみを扱います。rendition filtering機能についてのアップデートは以下エントリを参照ください。
IVSでS3に録画する際のサムネイル画像に関する設定がより柔軟になった!
IVS R2S3でのサムネイル画像の取得について
Amazon IVSでは2021/04/07より、S3への自動録画機能(Record to S3: R2S3)がサポートされるようになりました。このIVS R2S3自体の振り返りは以下エントリの冒頭にまとめてありますのでご参照ください。
本エントリでは、このIVS R2S3のサムネイル画像取得について簡単に振り返っておきましょう。2021/04/07のIVS R2S3サポートの段階で、ライブストリーミングの保存に加えて60秒ごとのサムネイル画像の保存自体はサポートしていました。
このR2S3のサムネイル画像の保存について、無効にする設定ができるようになり、また60秒後に最大12の画像(5秒毎に1つの画像)が生成できるように鳴ったのが2022/01/18のことです。
APIでThumbnailConfigurationというData Typeオブジェクトが利用可能になったのもこのタイミングとなります。
サムネイル画像取得に関する機能強化(高頻度サムネイル)
そして今回のアップデートです。(1) これまでのサムネイル画像の最短取得は5秒でしたが、これが最短1秒間隔となりました。1秒から60秒の間で指定するぐあいですね。また(2) サムネイル画像の解像度についても選択できるようになりました。 さらに、(3) サムネイルの保存について、最新のサムネイルのみをパスmedia/latest_thumbnail/thumb.jpg
に保存し、指定した間隔で上書きする 、という利用方法も可能になりました。
なおこれらの機能の詳細については、Amazon IVS API ReferenceのThumbnailConfigurationの項目にまとめられています。以前の状態についてはInternet Archive Wayback Machineの2022/11/21時点のページを参照し確認しました。
IVS R2S3で高頻度サムネイル画像を取得してみた
高頻度サムネイルについてのアップデート内容が確認できたところで、実際にこの機能を使って最短1秒間隔のサムネイル画像を取得してみたいと思います。
高頻度サムネイルを設定したrecording configurationの作成
まずはIVSのrecording configurationの作成から進めます。マネジメントコンソールのRecording configurationsのページ、[Create recording configuration]で進めます。
Setupでrecording configuration nameを入力、「Default configuration」ではなく「Custom configuration」を選択します。各設定項目が現れますので、Thumbnail recordingの項目に注目しましょう。
Thumbnail recording、まずは取得間隔となるTarget thumbnail interval (seconds)
の項目がありますね。デフォルトでは60
(60秒)ですが、1
(1秒)にしてみました。なお、Basic Channelを利用の場合は5秒以上にする必要があります。
続いてTarget thumbnail resolution、サムネイル画像の解像度の選択ですね。以下から選択できます。(デフォルトはSource (same resolution as input stream)
)。今回は入力映像をにFull HDにします。サムネイル画像がはあえてHD (720p)
を選択しました。
- Source (same resolution as input stream)
- Full HD (1080p)
- HD (720p)
- SD (480p)
- Lowest resolution
Thumbnail storageの項目で、サムネイル保存の方式と保存場所(パス)についても指定できるようになりました。デフォルトではこれまでどおり、生成されたすべてのサムネイル画像をmedia/thumbnails
に保存します。これがStore thumbnails sequentially
の動作です。新たに、最新のサムネイル画像をmedia/latest_thumbnail/thumb.jpg
に保存し、指定した間隔で上書きを行うモードも選択できるようになりました。これがStore only the latest thumbnail
です。これら両方を保存方式として指定することもできます、Store thumbnails sequentially, and store the latest thumbnail
ですね。
今回はデフォルトのStore thumbnails sequentially
で進めます。
そのほかの項目、Recorded renditionsやMerge fragmented streamsはデフォルトのまま進めます。Storageの項目で保存先となるS3バケットを指定して[Create recording configuration]ボタンでrecording configurationを作成します。
以下が作成したrecording configurationです。Thumbnail configurationの箇所で設定項目が確認できますね。
なお、動作確認用にデフォルト状態のrecording configurationも作成しておきました。以下の内容となります。
Channelを作成してライブストリーミングとR2S3を実施
recording configurationが作成できたら、そのconfigurationを使用するChannelを作成します。高頻度サムネイルを設定したものと、無効のデフォルト状態の2つのrecording configurationを作成したので、Channelも2つ作成しました。
こちらがデフォルトのrecording configurationを使用したChannelです。
続いて、高頻度サムネイルを設定したrecording configurationを使用したChannelです。
Channelが作成できたら、それぞれのChannelに向けて映像を打ち上げます。今回Streaming SoftwareはiPhone XS上のLarix Broadcasterを使用しました。Resolutionでは「1920x1080」、Frame rateは「30 fps」、Orientationは「Landscape」を選択します。ENCODINGの項目で、Bitrateを「8,000 Kbps」としました。Keyframe frequencyは「2 sec」に、またH.264 profileは「Main」にしています。
デフォルトのrecording configurationを使用したChannelについては4分とちょっと、、高頻度サムネイルを設定したrecording configurationを使用したChannelについては1分30秒ほど、映像を打ち上げました。(高頻度サムネイルを設定したほうがはサムネイル画像の数が膨大になるので短めです。)その間、マネジメントコンソールからライブストリーミングができていることを確認します。
高頻度でかつ解像度を指定したサムネイル画像の確認
デフォルト設定のサムネイルについて改めて確認
まずはデフォルト設定のrecording configurationを使用した場合に取得できるサムネイル画像について確認しておきましょう。JSONメタデータのrecording_started.json
を確認します。録画保存に指定したS3バケットの以下に格納されていますね。
- /ivs/v1/<aws_account_id>/<channel_id>/<year>/<month>/<day>/<hours>/<minutes>/<recording_id>/events/recording_satrted.json
以下がデフォルトのrecording configurationで録画した際の実際のrecording_started.jsonです。(参照しやすいようにjq
コマンドで整形をしています。)
{ "version": "v1", "recording_started_at": "2023-07-18T02:22:24Z", "channel_arn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/MzeSxxxxxxxx", "recording_status": "RECORDING_STARTED", "media": { "hls": { "path": "media/hls", "playlist": "master.m3u8", "byte_range_playlist": "byte-range-multivariant.m3u8", "renditions": [ { "path": "360p30", "playlist": "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_width": 640, "resolution_height": 360 }, { "path": "160p30", "playlist": "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_width": 284, "resolution_height": 160 }, { "path": "1080p", "playlist": "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_width": 1920, "resolution_height": 1080 }, { "path": "720p30", "playlist": "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_width": 1280, "resolution_height": 720 }, { "path": "480p30", "playlist": "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_width": 852, "resolution_height": 480 } ] }, "thumbnails": { "path": "media/thumbnails", "resolution_height": 1080, "resolution_width": 1920 } } }
ハイライトした箇所に記載がある通り、実際に取得できたサムネイル画像のサイズは1920x1080でした。この解像度は入力ソースのサイズと同じです。
実際に取得できたサムネイル画像を確認していましょう。media/thumbnails
を確認すると以下のように4つの画像が保存されていました。
実際の画像が以下です。1分ごとの取得となっていることが確認できますね。
高頻度でかつ解像度を指定したサムネイル画像について確認
続いて今回のアップデート内容、サムネイル取得間隔を最短となる1秒に、そしてサムネイル画像の解像度をHD (720p)
に設定した場合です。JSONメタデータのrecording_started.json
を確認すると以下の内容でした。(参照しやすいようにjq
コマンドで整形をしています。)
{ "version": "v1", "recording_started_at": "2023-07-18T02:33:32Z", "channel_arn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/eq3kxxxxxxxx", "recording_status": "RECORDING_STARTED", "media": { "hls": { "path": "media/hls", "playlist": "master.m3u8", "byte_range_playlist": "byte-range-multivariant.m3u8", "renditions": [ { "path": "1080p", "playlist": "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_width": 1920, "resolution_height": 1080 }, { "path": "720p30", "playlist": "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_width": 1280, "resolution_height": 720 }, { "path": "480p30", "playlist": "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_width": 852, "resolution_height": 480 }, { "path": "360p30", "playlist": "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_width": 640, "resolution_height": 360 }, { "path": "160p30", "playlist": "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_width": 284, "resolution_height": 160 } ] }, "thumbnails": { "path": "media/thumbnails", "resolution_height": 720, "resolution_width": 1280 } } }
ハイライトしたthumbnails
のところに記載があるように、サムネイル画像のサイズは1280x720
、HD (720p)
の解像度となっています。
S3に格納されている実際のサムネイル画像を確認してみましょう。96枚のサムネイルが作成されていました。タイムスタンプについては、はじめ4枚は同じタイミングでしたが、以降はきれいに1秒間隔で並んでいました。(Name順でソートするとthumb1.jpg
の次にthumb10.jpg
となってしまうため、Last modified順でソートしています。)
このS3マネジメントコンソールの表示でも、先ほどのデフォルト設定よりもサムネイル画像のサイズが小さくなっていることが確認できますね。(デフォルト設定では90KB前後、HD解像度のサムネイル画像は45KB前後。)
また実際に取得できたサムネイル画像が下記になります。冒頭のthumb0.jpg
から数秒間はスマホ固定中であまりきれいな映像ではなかったので、thumb8.jpg
から4枚を掲載しています。1秒間隔のサムネイル画像になっていますね!
まとめ
Amazon IVSのS3への自動録画、サムネイル画像に関連する機能のアップデートについてお届けしました。サムネイル画像の取得間隔が、これまでの最短5秒から最短1秒になっています。より細かな頻度でサムネイル画像が取得でき、活用の幅が広がるのではないでしょうか。またサムネイル画像の解像度についても選択できるようになりました。動画はフルHDでストリーミングしたいけどサムネイル画像はそこまで解像度必要ないな、といった場合もあるかと思います。実際の利用用途にあわせたサイズでサムネイルの取得、保存ができますね。そして最新のサムネイル画像のみ、固定のファイル名で書き出す機能も追加されました。高頻度でサムネイル画像が取得できるぶん、気になるのは保存するS3のストレージコストになるかと思います。それをカバーするように、解像度の指定や最新サムネイル画像のみの保存が可能になっています。特にR2S3のストレージコストについては、rendition filteringとあわせて最適化を図りましょう。