Electra Media Player

Electra Media Player の使用方法の概要。

Windows
MacOS
Linux

Media streaming inside Unreal Engine using the Electra Media Player

Electra Media Player は Unreal Engine 用のメディア プレイヤー プラグインで、 HTTP Live Streaming (HLS) 形式を使用したライブ ストリーミングとビデオ オン デマンド (VOD) ストリーミングの両方に対応するように設計されています。このプラグインを使用すると、ソースへのリンクを提供することで、ライブ パフォーマンスやメディアを Unreal プロジェクトでストリーミングすることができます。ストリーミングに加えて、Electra は .mp4 プログレッシブ ダウンロードや .mp4 ファイルのローカル再生にも対応しています。

Electra は次のプラットフォームでサポートされています。

  • Windows 7 以降

  • macOS

  • iOS 13.0 以降

  • Android Lollipop (5.1) 以降

  • Playstation 4

  • Playstation 5

  • Xbox One/S/X

  • Xbox Series X

  • Nintendo Switch

再生可能な最大ビデオ解像度および最大フレームレートは、プラットフォームに応じて異なります。これらの仕様については、各プラットフォームのドキュメントを参照してください。

Electra Media Player を使用して、プロジェクトでビデオをストリーミングする方法については、「Play a Video Stream (ビデオ ストリームをプレイする)」を参照してください。

サポートされているメディア形式

Electra Media Player は、HLS 形式のメディア ストリームをサポートする Unreal Engine に搭載されているストリーミング メディア プレーヤーです。詳細については、「HTTP Live Streaming」を参照してください。

また、次の仕様を満たしている場合、Electra Media Player は、単一の多重化 .mp4 (ISO/IEC 14496-12) ファイルの再生もサポートしています。

  • 最大 1 つのビデオ トラックを含む。

  • ビデオ トラックとオーディオ トラックのみを含む。

  • faststart (ファストスタート) としてフォーマットされている。faststart は、ファイルのメタデータ moov atom をフレーム mdat の前に格納します。

  • file:// URI スキームからのみアクセスできる。

.mp4 の機能であるため、Common Media Application Format (CMAF) もサポートされています。

サポートされているファイル形式の完全なリストについては、「メディア フレームワークの技術リファレンス」を参照してください。

サポートされているコーデック

Electra Media Player は次のコーデックでエンコードされたメディア ファイルとストリームのみをサポートしています。

メディア タイプ

コーデック

ビデオ コーデック

H.264 / AVC (ISO/IEC 14496-10)

オーディオ コーデック

AAC (ISO/IEC 14496-3)

HTTP Live Streaming

Electra Media Player は、HLS (RFC-8216) をサポートすることにより、Unreal プロジェクトでのストリーミング機能を提供しています。HLS では、サーバーがメディア ファイルを複数のセグメントに断片化して、インデックス ファイルを作成します。このインデックス ファイルには、メディアのセグメントのリストと、クライアントがメディア再生のリクエストをフォーマットするために読み取って使用する場所のリストが格納されています。

また、HLS ではさまざまなビットレートのメディア ファイル向けのバリアント ストリームをサポートしているため、クライアントは再生時のストールを最小限に抑えることができます。バリアント ストリームは、マスター プレイリスト という別のインデックス ファイルで定義されます。HLS アーキテクチャの詳細については、Apple の『HLS に関するドキュメント』を参照してください。

バリアント ストリームの制約事項

HLS では、一致するセグメントを識別する方法がなくても、バリアント ストリームが持続時間やセグメント数が異なるセグメントを使用できます。クライアントのオーバーヘッドを減らすために、Electra Media Player はすべてのビデオ バリアントを完全に同じにセグメント化する必要があります。VOD プレゼンテーションでは、Electra Media Player はバリアント プレイリストのセグメントの絶対インデックスに基づいてバリアントを切り替えます。

ライブ ストリーミング プレゼンテーションでは、プレイリストは常に変化しており、いくつかのメディア セグメントのローリング ウィンドウが含まれているため、他の方法で処理されています。メディアを完全に同じにセグメント化するだけでなく、一致するセグメントを識別するためには、EXT-X-PROGRAM-DATE-TIME タグを使用します。

最適なパフォーマンスを実現するため、Electra Media Player には、プレイリストとメディア セグメントに関して次のような制約事項があります。

  • バリアント ストリームは、ISO/IEC-14496-12 または CMAF セグメントとしてフォーマットされている必要がある: ISO/IEC-13818-1 準拠の MPEG2 トランスポート ストリーム セグメントはサポートされていません。

  • バリアント ストリームの対応するセグメントが、セグメント インデックスごとに持続時間が同じである必要がある: ビデオは、等しくセグメント化されている必要はありません。すべてのバリアント ストリーム A および B に対して、セグメント n のセグメント持続時間 dur は次の式のように同じです。

    dur(segment A(n)) == dur(segment B(n))

    異なるストリーム タイプでは、セグメント化する際に同じ持続時間を持つ必要はありません。オーディオは、ビデオ セグメントとは異なるセグメントの持続時間を使用できます。

  • オーディオ ストリームを切り替えることはできない: マスター プレイリストで指定されたオーディオ ストリームは 1 つのみである必要があります。

  • バリアント プレイリストでは、セグメントの持続時間を最近傍の整数に丸めることはできない: 個々のビデオ イメージとオーディオ サンプル ブロックが等しくないため、オーディオとビデオのセグメントが異なります。Electra Media Player は、開始時刻がビデオ セグメントの開始時刻と最も一致するオーディオ セグメントを特定して、ビデオのその開始時刻より前のオーディオ サンプルを破棄することで、オーディオとビデオを同期させます。セグメントの持続時間がバリアント プレイリストで正確に指定されていない場合、小さなエラーが積み重なり、最終的には間違った開始オーディオ セグメントを選択してしまい、オーディオとビデオの同期がとれなくなってしまいます。

  • マスター プレイリストではオーディオ グループが必要: コンテナ形式では、1 つのエレメンタリー ストリームが必要であるため、マスター プレイリストにオーディオ グループを指定する必要があります。次は、マスター プレイリストでオーディオ グループのメディア タグを指定する例です。

    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio",NAME="audio_0",DEFAULT=YES,URI="manifest_0.m3u8"

    #EXT-X-STREAM-INF:BANDWIDTH=8905600,RESOLUTION=1920x1080,CODECS="avc1.42c028,mp4a.40.2",AUDIO="group_audio"

  • EXT-X-STREAM-INF タグには CODECSRESOLUTION プロパティが必要である。 これらのプロパティは RFC-8216 ではオプションであるものの、Electra Media Player では必須プロパティです。

  • EXT-X-STREAM-INF タグでは FRAME-RATE を使用する: FRAME-RATE プロパティは、Electra Media Player でのメディア再生で強く推奨されます。これは、FRAME-RATE プロパティが 30 フレーム/秒以上のデコードに問題があるプラットフォームでは再生できないストリームを特定してフィルタリングするのに役立つためです。

  • 必要なオーディオ グループ以外のレンディション グループはサポートされません: レンディション グループは、異なる表示角度などの代替コンテンツに使用されます。Electra Media Player は、ビデオのバリアント プレイリストで参照されるオーディオ グループのレンディション グループのみをサポートしています。

  • ビデオ セグメントには、最初のフレームとして Instantaneous Decoder Refresh (IDR) フレームが必要: 再生は、ビデオ ストリームに IDR フレームが存在する場合にのみ開始されます。これは、EXT-X-INDEPENDENT-SEGMENTS タグを使用することを暗黙的に要求していることに相当します。このタグ自体は、設定が必須ではないものの、強く推奨されます。

  • Frame accurate seeking (フレーム単位で正確なシーク) はサポートされていない: 再生を開始すべき指定時刻に最も近い IDR フレームを特定して、そこから再生を開始します。

  • HLS 形式のストリームでは、AES-128 暗号化のみがサポートされる: SAMPLE-AES はサポートされていません。

メディア ストリームには、ビデオ プレゼンテーションを含まない、オーディオ トラックを含めることができます。また、オーディオを含まないビデオのみをストリーミングすることもできます。

サポートされていない HLS タグ

Electra は、マスター プレイリストとバリアント プレイリストの次のタグを無視します。これらのタグがファイル内に存在しても、正しい再生に必要な場合を除き、エラーは発生しません。

  • EXT-X-DISCONTINUITY

  • EXT-X-DISCONTINUITY-SEQUENCE

  • EXT-X-DATERANGE

  • EXT-X-I-FRAMES-ONLY

  • EXT-X-I-FRAME-STREAM-INF

  • EXT-X-SESSION-DATA

  • EXT-X-SESSION-KEY

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる