The solution I found was to call getUserMediawith the video and sound turned on, if the call failed (this means that they donβt have a camera or microphone), then you call getUserMediaagain from the callback the rejection that you provide the requesting access only to the microphone.
var failedLocalAudioAndVideoStreamCallBack = function (error) {
getUserMedia({ audio: true, video: false },
gotLocalAudioStreamCallBack, failedLocalAudioStreamCallBack )});
}
getUserMedia({ audio: true, video: true },
gotLocalAudioAndVideoStreamCallBack, failedLocalAudioAndVideoStreamCallBack);
Of course, you can cope with successes and failures as you like.
NOTE. If there is no camera, a pop-up window requesting the initial camera feed (which will fail) never pops up. Thus, the user will receive only one access request (which makes this solution a little more acceptable).