DRYな備忘録

Don't Repeat Yourself.

【iPhone】【Safari】getUserMediaで取ったMediaStreamをvideoタグにセットしても最初のフレームだけ描画されて止まってしまう問題【React】

問題

  • iPhoneSafariにおいて、
  • navigator.mediaDevices.getUserMediaによって、
  • videoを含むMediaStreamを取得し、
  • HTMLのvideoタグに動画を描画しようとすると、
  • 最初のフレームだけ描画されたのち、フリーズしてしまう。

解決

getUserMediaを呼ぶ前に、videoタグにautoplay, muted, playsinline属性が付与されている必要がある。

stackoverflow.com

その他の注意

  • Reactのjsxないしtsxファイルにおいて、<video playsinline={true} />とした場合でも、最終的にレンダリングされたHTMLにその属性が付与されているか確認すること
    • されてなかったので、わざわざRefObjectつくってDOMのAPIからsetAttribute('playsinline', '')などとした
  • そもそもgetUserMediasecure context と呼ばれるウェブページにおいてのみ動作するため、HTTPSを使ったページにホストする必要がある

参考

雑感

  • 1日ハマった

DRYな備忘録として