console.lealog();

@leader22のWeb系に関する勉強めもブログですのだ

Androidで`getUserMedia()`したら`NotReadableError: could not start video source`

なかなか懐かしい気分にさせてくれますが、特定の機種でのみ発生するエラーでした。

回避方法がちゃんとあるのでそれをメモっておきます。

再現手順

  • `getUserMedia({ video: true })`する
  • 取得した`MediaStream`をとっておく
  • `enumeratedDevices()`して、違う`deviceId`を指定して`getUserMedia()`

これだけでエラーになる。

NotReadableError: could not start video source

回避方法

2度目の`deviceId`指定で`getUserMedia()`する前に、既存の`MediaStream`を開放する。

stream.getTracks().forEach(track => track.stop());

こうした後でなら、問題なくメディアをつかめる。
つかんでから開放するコードを書きがちなんやけど、それでは手遅れ。

ちなみに、別タブでメディアをつかんでいる場合もダメで、ブラウザごとに1つのカメラしかつかめないっぽい・・?

再現した・しなかった機種

再現しなかった機種。

  • Pixel 4
  • Pixel 3a

再現しなかった機種。

もしかしたらOSバージョンとか、Chromeバージョンとかの兼ね合いもあるかもしれない。