なかなか懐かしい気分にさせてくれますが、特定の機種でのみ発生するエラーでした。
回避方法がちゃんとあるのでそれをメモっておきます。
再現手順
- `getUserMedia({ video: true })`する
- 取得した`MediaStream`をとっておく
- `enumeratedDevices()`して、違う`deviceId`を指定して`getUserMedia()`
これだけでエラーになる。
NotReadableError: could not start video source
回避方法
2度目の`deviceId`指定で`getUserMedia()`する前に、既存の`MediaStream`を開放する。
stream.getTracks().forEach(track => track.stop());
こうした後でなら、問題なくメディアをつかめる。
つかんでから開放するコードを書きがちなんやけど、それでは手遅れ。
ちなみに、別タブでメディアをつかんでいる場合もダメで、ブラウザごとに1つのカメラしかつかめないっぽい・・?