MediaTrackのExternalMediaPlayerを使う場合にMediaPlayerを参照するMediaTextureに描画されないことがある

お世話になっております。

<br/>

LevelSequenceのMediaTrackのExternalMediaPlayerを試しています。

以下の手順でMediaTextureに動画が描画されなくなる現象が発生しました。

こちら不具合のようにみえるので、ご確認いただけないでしょうか?

<br/>

  1. LevelSequence(LS), MediaPlayer(MP), MediaTexture(MT), FileMediaSource(MS)を作成する
  2. MTのMediaPlayerプロパティにMPを設定する
  3. LSでAddボタンからMediaTrackを追加する
  4. MediaTrackの+ボタンからMediaSourceのMSを選択してセクションを追加する
  5. 追加したセクションのUseExternalMediaPlayerプロパティにチェック、ExternalMediaPlayerプロパティにMPを設定する
  6. MTをエディタで開き動画が描画されていることを確認する
  7. セクションのUseExternalMediaPlayerプロパティのチェックを外し、ManaTextureプロパティにMTを設定する。
  8. 再度セクションのManaTextureプロパティをNoneに戻し、UseExternalMediaPlayerプロパティをチェックする
  9. 再度MTをエディタで開き動画が描画されなくなっていることを確認する

<br/>

以上、よろしくお願いいたします。

[Attachment Removed]

お世話になっております。

本件ご連絡が遅くなってしまい申し訳ございません。現在調査中ですので今暫くお待ちいただけますと幸いです。

[Attachment Removed]

お世話になっております。

本件返信にお時間を頂いてしまい申し訳ありません。

​

頂いた手順にて問題を再現し調査を行ったところ、以下Issueとして類似の報告は受けていたものの修正できていない問題となっておりました。

UE-137854 Media is not playing with Use External Media Player enabled when Media Texture assigned

​

こちらワークアラウンドとしましては、Media Textureを使い回さず別でご用意頂く、

または、Media TextureのMedia Playerを設定しなおして保存いただく事で再度再生可能となる状態です。

​

根本の問題としましては、Media TextureのMedia Playerがnullptrと設定されてしまうケースがあるようでして

これらの処理が走る場合にMedia TextureからのMedia Playerに再度設定するように変更することで改善可能のようでした。

※この挙動が望ましいケースもあるかと思いますが、ランタイム上で独自でMediaPlayerを変更するような実装がある場合、意図せずMedia Texture設定のMediaPlayerに戻ってしまうなど状態遷移に気を付ける必要があるかもしれません。

Engine/Source/Runtime/MediaAssets/Public/MediaTexture.h

(GetMediaPlayer() の宣言の後143行目あたりに以下を追加)

   /**
    * Get the default media player.
    *
    * [Content removed] or nullptr if not set.
    * [Content removed] SetMediaPlayer
    */
   UMediaPlayer* GetDefaultMediaPlayer() const { return MediaPlayer; }

Engine/Plugins/Media/MediaCompositing/Source/MediaCompositing/Private/MovieScene/MovieSceneMediaTemplate.cpp

       // Evaluate() 1009行
       else if (Params.MediaTexture->GetMediaPlayer() == MediaPlayer)
       {
           ...
           // Params.MediaTexture->SetMediaPlayer(nullptr);
           Params.MediaTexture->SetMediaPlayer(Params.MediaTexture->GetDefaultMediaPlayer());
       }
 
   // TearDown() 1049行
   if ((Params.MediaTexture != nullptr) && (Params.MediaTexture->GetMediaPlayer() == MediaPlayer))
   {
       // Params.MediaTexture->SetMediaPlayer(nullptr);
       Params.MediaTexture->SetMediaPlayer(Params.MediaTexture->GetDefaultMediaPlayer());
   }

メモリ上問題ない場合は、Media Textureを別にして頂いた方が他への影響は少なそうですが、

運用上問題無さそうであれば上記修正をお試しいただけますと幸いです。

​

お手数おかけしますが、よろしくお願いいたします。

[Attachment Removed]

ご回答ありがとうございます。

諸々承知いたしました。

ご提示いただいたどの方法でも改善することを確認できましたので、どのようにするか検討したいと思います。

こちらクローズで問題ございません。

ご対応ありがとうございました。

[Attachment Removed]

ご確認及び結果を共有頂きありがとうございます。

本件はクローズとさせて頂きますが、また何かございましたらお気軽にご相談ください。​

よろしくお願いいたします。​

[Attachment Removed]