Switching cameras requires web page reload in webbrowser-app, not available in webapp-container

Bug #1554244 reported by Peter Bittner
This bug report is a duplicate of:  Bug #1461600: Refinements to media permissions API. Edit Remove
22
This bug affects 5 people
Affects Status Importance Assigned to Milestone
webbrowser-app (Ubuntu)
Confirmed
Undecided
Unassigned

Bug Description

When a web site uses WebRTC for video conferencing the webbrowser-app accesses the rear camera by default. The user can switch cameras via Settings -> Privacy & Permissions -> Camera & Microphone. Unfortunately, changing this setting doesn't immediately have effect on the open web page. You have to reload the page first, which is not intuitive.

Tested with bq Aquaris E5 Ubuntu Edition, OTA-9.1 (vegeta).

Additional question: How can switching cameras be handled in web apps (driven by the webapp-container binary)? The webapp-container does neither provide a feature to specify a (different) default camera nor an interactive possibility to do so. An API call to switch cameras would be awesome.

Expected Behavior
-----------------

- Switching cameras via the settings immediately has effect on the camera used by web sites open in the webbrowser-app.
- Specifying a default camera (startup settings) is available with the webapp-container binary.
- Switching cameras programmatically (via an API call) and/or interactively is possible in web apps driven by the webapp-container.

How to Reproduce
----------------

1.) Go to e.g. https://appear.in/test-drive on your Ubuntu phone (default webbrowser-app)
2.) When prompted for "Allow this domain access the camera and microphone" choose "Yes"
3.) Click away the chat window (touch the down-arrow at right lower corner)
4.) Touch the screen to dismiss the "help text" (the video captured by the rear camera is shown)
5.) In the browser address bar got to Menu -> Settings -> Privacy & Permissions -> Camera & Microphone, and switch to the front camera; go out of the menu going back the hierarchy; the rear camera video is still shown
6.) Tap the address bar, tap on the "Reload" icon to reload the page; the front camera video is finally shown

Other Details
-------------

- https://github.com/bittner/appear-in/issues/1 (conversation demonstrating users are confused about browser behavior)

description: updated
Revision history for this message
Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in webbrowser-app (Ubuntu):
status: New → Confirmed
Revision history for this message
Olivier Tilloy (osomon) wrote :

Once the second part of bug #1461600 is implemented, the user will be able to select which camera to use from the permission prompt, instead of having to change the default camera in the settings (which incidentally affects all domains, not just the current one).

That, together with the fix for bug #1554202, will enable switching cameras in the webapp container.

I think that changing the default camera in the settings doesn’t update the camera currently being used by the current page precisely because in the future there will be a way to select the camera to use per-domain. Changing the default camera should affect only future decisions, not past/current ones.

In light of that, I’m marking this bug a duplicate of bug #1461600.

Revision history for this message
Peter Bittner (peter-bittner) wrote :

If I wanted to switch cameras during a video conference (e.g. to show participants my surroundings) how would I go about it if this can only be chosen in the permission dialog?

The Android/iOS app of appear.in allows tapping the video image in order to switch camera during an active call [1]. This requires some kind of API (e.g. JavaScript would trigger an API function), I would guess. Or can you build this in into the browser or video directly?

[1] See "How do I switch between front and rear facing cameras on mobile?" in https://appear.in/information/faq/

Revision history for this message
Olivier Tilloy (osomon) wrote :

MediaDevices.getUserMedia() allows specifying constraints to select the front/rear camera, and this can be used to change the camera being used on the fly, without reloading the page.

There is an example of that https://simpl.info/getusermedia/sources/, however it fails with the following error:

[JS] (https://simpl.info/getusermedia/sources/js/main.js:48) Uncaught TypeError: window.stream.stop is not a function

I verified that it fails in the same way in chrome, so it’s not an oxide issue.
I modified that code (to use stream.getTracks()[].stop()) and ran it (https://people.canonical.com/~osomon/getusermedia/sources/) on my arale, and this works better, although this is still not switching cameras. That one might be a bug in oxide (needs further investigation).

So assuming this works in oxide (which apparently it doesn’t, will file a bug for it), the app could provide a toggle to switch between front/rear camera if it wanted to (that’d be up to appear.in to add that to their UI if not present yet).

Revision history for this message
Olivier Tilloy (osomon) wrote :

I filed bug #1554603 to track the issue with switching between front and rear cameras not working.

Revision history for this message
Peter Bittner (peter-bittner) wrote :

This issue is still not fixed with OTA-10.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.