Как запустить заднюю камеру с помощью webkitGetUserMedia

Я пытаюсь открыть заднюю видеокамеру в старом телефоне (версия Android 5.0). Поскольку эти старые устройства не поддерживаются navigator.mediaDevices && navigator.mediaDevices.getUserMedia так что я зависим только от webkitGetUserMedia. У меня есть успех, чтобы открыть камеру и показать видео, но он использует только переднюю камеру, и мне нужно видео с задней камеры. Вот мой код

if(navigator.webkitGetUserMedia) { // WebKit-prefixed
        navigator.webkitGetUserMedia({video: true}, function(stream){
            video.src = window.webkitURL.createObjectURL(stream);
            video.play();
        }, errBack);

Я не нахожу никакой документации, связанной с этим. Есть ли способ открыть заднюю камеру с помощью webkitGetUserMedia? Во-вторых, поскольку я использую приложение на основе cordova и по умолчанию Cordova использует веб-представление системы по умолчанию (есть возможность использовать crosswalk, но не хочу смешивать его с приложением на основе cordova), есть ли возможность интегрировать любое другое веб-представление для достижения этой цели (getUserMedia и т. Д.))

3 ответа

Вам нужно изменить режим облицовки

{ audio: true, video: { facingMode: "user" } }

или же

{ audio: true, video: { facingMode: { exact: "environment" } } }

Возможно, вы захотите черпать вдохновение в том, как adaptor.js переключает сталкивающийся режим в старых версиях: https://github.com/webrtcHacks/adapter/blob/master/src/js/chrome/getusermedia.js

В основном он пытается использовать navigator.mediaDevices.enumerateDevices (вам, возможно, придется прибегнуть к более ранней функции MediaStreamTrack.getSources()) для перечисления устройств, а затем пытается угадать, какая из них является задней камерой, передавая deviceId для getUserMedia. Будьте осторожны с этим, так как ваша старая версия может иметь разные имена ограничений (обратитесь к функции constraintsToChrome_) для deviceId, и документации для этого очень мало.

Прежде всего, я настоятельно рекомендую использовать AdapterJS, который скрывает все различия во всех различных реализациях браузера (хороший блог на эту тему от Tsahi).

Во-вторых, вы используете устаревший GUM-API, который я бы не рекомендовал. Я обнаружил проблему в проекте GitHub, которая является именно вашей проблемой, может быть, это поможет вам.

Заявлено в рамках вопроса:

navigator.getUserMedia функция устарела, и вы должны вместо этого использовать более новую MediaDevices.getUserMedia функция. Ссылка на документы.

Таким образом, если вы применили эти изменения, ГУМ должен принять

{ audio: true, video: { facingMode: { exact: "environment" } } }

ограничения (которые были правильно указаны в первом ответе), которые должны дать вам видеопоток задней камеры вашего телефона.

Другие вопросы по тегам