SteamDeck上でUnityのVideoPlayerを利用しても動画が再生されない時の解決策

これはゲーム開発者向けの記事です。
プレイヤーの方で対応方法を探している場合は[SteamDeck Proton GE]などでググってください。

症状

  • Winows上では、正しく動画が再生されている。
  • SteamDeck上で再生しようとすると、動画の代わりにカラーバーが表示される。
  • Unity2020.3, 2021.3 にて症状を確認。

原因

  • SteamDeckというかProtonの問題。
    • Proton GEなら大丈夫らしいが、開発者としてはデフォルトのProtonで動いてほしい。
  • 少なくともUnityのVideoPlayer経由では、H.264, H.265の動画が再生出来ない模様。
    • VideoClipのCodecがAutoの時、StandaloneではH.264が使用される。

メモ

確かにドキュメントにも以下のように記載がある。

Linux の場合、最適なエンコーディングは、以下のコーデックを使用した .webm コンテナです。
ビデオトラックの場合、VP8
オーディオの場合、Vorbis

docs.unity3d.com

対応

  • CodecをVP8にすれば正常に再生されるようになる。

補足

UnityのTranscodeを利用すると細かいエンコードの調整ができず、想定よりもファイルサイズがデカくなることが多い。
ファイルサイズを気にするなら、ffmpeg等を利用して自分でエンコードしてUnity上のTranscodeは切って利用すると吉。
この時、VP8が利用できないプラットフォームにもVP8のまま配信されないように注意 。(令和の時代にはあまりないとは思うけど・・・。)
さらに、AudioCodecにOpusを利用すると正常に音が再生されなかったのでVorbisを利用すること。

VP9の方が容量は抑えられるが、対応しているプラットフォームが少なくなる。(ので、SteamDeck上で正常に再生されるかも未検証。試した方いたら教えてください。)

自分用メモ

ffmpeg -i input.mp4 -c:v vp8 -b:v 1M -s 1920x1080 -pass 1 -an -f null /dev/null
ffmpeg -i input.mp4 -c:v vp8 -c:a libvorbis -b:v 1M -s 960x540 -pass 2 output.webm