🎬

[UE4] Electra Media PlayerにおけるHLSの作り方

2022/01/26に公開

Electra Media Playerとは

UE4.26.1より使えるようになった、HLSが再生できるようになるメディアプレーヤーのプラグイン

基本的な使い方は以下の公式ドキュメントをご参照いただきたい。
https://docs.unrealengine.com/4.27/ja/WorkingWithMedia/IntegratingMedia/MediaFramework/ElectraPlayer/

再生できるHLSの制約

上記ドキュメントの「バリアント ストリームの制約事項」の記載でもわかる通り、Electra Media Playerで再生できるストリームの制約はかなり多いです。
hls.js等で再生できても、Electra Media Playerでは再生できないということが往々にして発生します。

詰まりポイント

ここでは主に自らがElectra Media Playerで再生する際に詰まったポイントを記載します。

オーディオグループの作成

Electra Media Playerで再生するhlsストリームには、AACのオーディオストリームが1つ含まれているオーディオグループを作成する必要があります。

  • ffmpegのオプションでは、以下のように指定して作成します。
     -map 0:v -map 0:a -c:v:0 h264 -c:a:0 aac -hls_list_size 0 -var_stream_map "v:0,agroup:audio_group a:0,agroup:audio_group,language:JP"

  • AWS Elemental MediaLiveでは、オーディオレンディショングループを作成します。

https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/audio-renditions.html

Fragmented MP4でのフォーマット

ドキュメントでは以下の記載があります。

バリアント ストリームは、ISO/IEC-14496-12 または CMAF セグメントとしてフォーマットされている必要がある

これはつまり、Fragmented MP4(.m4s)でフォーマットされている必要があるということです。
一般的なTransport Stream(.ts)でフォーマットされたものは再生できないということとなります。

  • ffmpegのオプションでは、以下のように指定して作成します。
    hls_segment_type fmp4

  • AWS Elemental MediaLiveでは、HLS出力の設定をfmp4 HLSにします。

サンプル

参考までに当方で再生が確認できた(2022年1月時点)ffmpegコマンドを以下に掲載しておきます。
 ffmpeg -i (入力パス) -map 0:v -map 0:a -c:v:0 h264 -c:a:0 aac -hls_segment_type fmp4 -f hls -master_pl_name (マスタープレイリストの名前) -hls_fmp4_init_resend 1 -var_stream_map "v:0,agroup:audio_group a:0,agroup:audio_group,language:JP" (出力パス)

参考になった資料

https://nico-lab.net/hls_muxer_with_ffmpeg/
https://booth.pm/ja/items/830235

もし不明点等ございましたら、お気軽にTwitter(@gagagahaku)等でお声かけください!

Discussion