Edited at

MediaLiveにおける"With HLS Output groups output must be segmentable"エラーについて

初めまして。streampackのfadoです。6月に入社し、とても過ごしやすい現場に恵まれると同時に覚えないといけないことがたくさんあってあまり追いつけていない状態です。さては、今回は初投稿ということで研修の際、中々解決できなかったAWS MediaLiveに纏わる課題を紹介したいと思います。


背景

MediaLive上でHLS配信の設定をするにあたって本題のエラーが発生しました。ネット上での有力な解決法があまり見つからないため、原因究明に時間がかかってしまいました。同じ壁にぶつかった方々の参考になれたらと思い、投稿しました。

本エラーが発生した経緯に重点を置くことにしましたのでOBSソフト、MediaStore、MediaLive、CloudFrontでの細かい設定手順や視聴結果などは割愛させていただきます。

尚、私の説明等に不備や間違いなどがあればご指摘頂けると嬉しいです。


課題

product-page-diagram-Elemental-MediaLive@2x.2570dba1da7763ff116d3dc2897e772ff238b63e.png

OBSソフト(rtmpプロトコル)でライブ配信を行い、MediaLive上で生成されたHLS用ファイル(m3u8ファイルとtsセグメントファイル)をMediaStoreに格納し、CloudFront経由で動画配信を視聴するという流れとなります。


課題要件

HLS配信でABR技術を用いてMediaLive上にて下記要件を設定します。

①Bitrate: 2M , 解像度: 1280x720 , FrameRate:30fps

②Bitrate: 1M , 解像度: 960x540 , FrameRate:30fps

③Bitrate: 400k , 解像度: 480x270 , FrameRate:15fps

セグメント長:4s


再現手順


MediaStoreのcontainerを作成

qiitq2019-07-30 17.39.21.png


CloudFrontをセットアップ

OriginはMediaStoreのEndpointにします。

スクリーンショット 2019-08-02 11.00.18.png


MediaLiveのセットアップ


MediaLiveのInputsを作成

スクリーンショット 2019-07-30 17.41.31.png


MediaLiveのChannelを作成し、下記項目を設定

スクリーンショット 2019-08-01 15.43.39.png

1.Channel and input details

2.General settings

3.Input attachments(Add)

4.Output groups

Output groups(Output group type:HLS)を作成した後、課題要件に基づいて各HLS outputsを作成。下記は要件①を設定したものを掲載します。

*要件以外の値はAWSのデフォルトにしています

スクリーンショット 2019-07-30 15.33.06.png

スクリーンショット 2019-07-30 15.35.31.png

スクリーンショット 2019-08-01 15.24.29.png

スクリーンショット 2019-08-01 15.24.45.png

①〜③の要件の設定が終わりましたら「Update Channel」をクリックします。ここで本題のエラーが出て設定の反映ができなくなります。

スクリーンショット 2019-08-02 17.50.48.png


原因

エラー内容を見ると「HLS Output groupsのアウトプットは区分できるようにしないとダメだよ」というふうに解釈ができます。色々と調べた結果、この問題はGOP(Group of Picture)に関係があると分かりました。GOP周期(=GOPサイズ / Framerate)は全てのoutputと同じ値でなければいけないようです。AWSのデフォルト設定だとGOPサイズが60です。Framerate=30fpsの場合GOP周期は2秒ですが最後の③の要件は15fpsのため、周期が4秒となり、区分できないというエラーが出たわけです。


解決策

全てのoutputのGOP周期が同じ値になるように調整します。今回はframerate値が決まったのでGOPサイズのみ変更します。この場合、課題要件③、15fpsのOutput用GOPサイズを30に変更することによって全OutputのGOP周期が2秒となり、設定の反映ができるようになりました。


  • Frame rate 30の場合、GOPサイズを60にします。Size unitはframesのまま(デフォルト)

    スクリーンショット 2019-06-21 10.14.50.png


  • Frame rate 15の場合、GOPサイズを30にします。Size unitはframesのまま(デフォルト)

    スクリーンショット 2019-06-21 10.15.08.png



感想

GOPを含めた動画配信の基礎知識の理解がもっと深かればもう少し早い段階で問題を解決できたのではないかと思いました。AWS MediaService(MediaLive,MediaStore等)がローンチされてからまだ約一年半というのもあって細かいエラーに対しての記事はまだまだ少ない感じがします。これから直面する問題があれば記事にしていきたいと考えています。


用語

・AWS Media Services

クラウド上で動画ワークフローを構築可能なフルマネージドのメディアサービス群

・AWS Elemental MediaLive

ブロードキャストテレビやマルチスクリーンデバイスに配信するための高品質なライブ動画ストリームのエンコードを可能にする動画処理サービス

・AWS Elemental MediaStore

ライブ配信に必要な高パフォーマンスと即時の整合性を実現する、動画配信およびストレージサービス

・AWS CloudFront

ユーザーへの静的および動的ウェブコンテンツ (.html、.css、.js、イメージファイルなど) の配信を高速化するウェブサービス

・ABR(Adaptive Bitrate streaming)

クライアントのデバイスの通信速度に合わせてビデオの品質レベルを変えながらベストなものを提供する技術

・HLS(HTTP Live Streaming)

Apple社が開発したHTTPベース動画ストリーミング技術

・GOP(Group of Picture)

Iフレーム,Pフレーム,Bフレームの3つに分けて圧縮する技術


参考資料

https://aws.amazon.com/jp/medialive/

https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/Introduction.html

https://docs.aws.amazon.com/ja_jp/mediastore/latest/ug/what-is.html

https://aws.amazon.com/jp/medialive/features/

https://www.wowza.com/blog/adaptive-bitrate-streaming

https://en.wikipedia.org/wiki/HTTP_Live_Streaming

https://developer.apple.com/streaming/

https://aviutl.info/keyframe/