getUserMedia and disconnecting devices

Hello,

I wish to clarify how errors should be reported by getUserMedia in case 
no devices are available or when a device is disconnected.

Let's assume there is a PC with USB camera that may be attached and 
detached and

   getUserMedia({ video: true }, success_callback, error_callback)

is called. (an analogous situation could arise with the use of other 
devices like a Bluetooth headphone)

Case 1: no camera attached.
When there's no camera at all there are two possibilities: throw a 
NOT_SUPPORTED_ERR exception or call error_callback with the only 
available error code: PERMISSION_DENIED.

NOT_SUPPORTED_ERR sounds like a more appropriate error than 
PERMISSION_DENIED when there is no device but step 9 of the algorithm[1] 
says "...due to platform limitations, jump to the step labeled failure 
below."
The "failure" step says that the error_callback should be called.

Case 2: camera attached when calling getUserMedia but detached before 
the user has granted permission for its use.

In this case a sensible way to handle the error is to abort the UI for 
asking user consent and call the error_callback. Again, the only 
possible error code is PERMISSION_DENIED.

Case 3: camera is attached and the user grants permission for its use, 
success_callback is called with a LocalMediaStream object and then the 
camera is detached.

In this case the LocalMediaStream should be stopped when the camera is 
disconnected and an ended event should be dispatched.


In cases 1 and 2 the best approach seems to be calling the 
error_callback with PERMISSION_DENIED but this code doesn't sound 
appropriate.
Therefore I suggest to introduce a new error code, e.g. 
DEVICE_NOT_AVAILABLE.


Alternatively, since distinguishing between PERMISSION_DENIED and 
DEVICE_NOT_AVAILABLE is of little value to the web developer (other than 
maybe displaying an appropriate error message), the PERMISSION_DENIED 
error code could be renamed DEVICE_NOT_AVAILABLE or something else that 
is general enough to cover both cases.
-- 
Marcin Simonides

[1] http://dev.w3.org/2011/webrtc/editor/getusermedia.html#local-content
-- 
Marcin Simonides

Received on Sunday, 13 May 2012 20:39:47 UTC