レンダラープロセスでMediaStreamでカメラ映像を表示しつつ、メインプロセスでnode-webcam - npmを使って定期的にカメラ映像を撮影しようとしたところ、表題の問題にぶつかった。
macOS向けアプリケーションでは発生しない。
答え
video - Is it possible for two processes to access the webcam at the same time? - Ask Ubuntu
上記記事の回答にあるように、 v4l2loopbackなどで映像ソースを仮想カメラ複数にループバックさせて、レンダラープロセスとメインプロセスで使い分ける。
だめだったこと
以下のようにしてメインプロセスの定期撮影時にレンダラープロセスのMediaStreamを停止しようとしたが、Webカメラの解放までの時間が安定しなかった。
function stopStreamedVideo(videoElem) { let stream = videoElem.srcObject; let tracks = stream.getTracks(); tracks.forEach(function(track) { track.stop(); }); videoElem.srcObject = null; }