Android WebView-在相机之间切换:可以在浏览器(Firefox和Chrome)中使用,但不能在WebView中使用-OnChange问​​题?

cla*_*182 5 javascript camera android android-webview

我正在使用WebRTC开发一个Android视频应用,我想增加从前置摄像头到后置摄像头更改的功能。为了练习此功能,我使用了以下网站:https : //simpl.info/getusermedia/sources/并修改了代码,以便现在我可以使用在Chrome上运行的浏览器和在Android上运行Firefox的相机之间进行切换,在WebView上-第一次打开时它将显示来自前置摄像头的流,但是当我将选择更改为后置摄像头时,它将不更新到后置摄像头。

有谁知道解决方案或解决方法吗?这与onChange在Android WebView中不起作用有关吗?(我已经搜索过了,但是找不到解决方案)

我希望这不是一个愚蠢的问题,我对Android开发完全陌生。

我的HTML:

<!DOCTYPE html>


<html lang="en">
  <head>
    <script src="main.js"></script> 
    <base target="_blank">
    <title>Video TEST</title>

  </head>
  <body>
    <p>This is a test</p>
    <div id="container">
      <div class="select">
        <label for="videoSource">Video source: </label><select id="videoSource"></select>
      </div>
      <video muted autoplay></video>
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的JavaScript(main.js):

'use strict';

var videoElement = document.querySelector('video');
var videoSelect = document.querySelector('select#videoSource');

navigator.mediaDevices.enumerateDevices()
    .then(gotDevices).then(getStream).catch(handleError);

videoSelect.onchange = getStream; 



function gotDevices(deviceInfos) {
  for (var i = 0; i !== deviceInfos.length; ++i) {
    var deviceInfo = deviceInfos[i];
    //This creates an element that can be used later
    var option = document.createElement('option');
    //this sets the value of the option to the ID of the Device
    option.value = deviceInfo.deviceId;
    if(deviceInfo.kind === 'videoinput') {
    option.text = deviceInfo.label || 'camera' + (videoSelect.length + 1);
    videoSelect.appendChild(option);
  } else {
      console.log('Found one other kind of source/device: ', deviceInfo);
    }

    }

}

function getStream() {
  if (window.stream) {
    window.stream.getTracks().forEach(function(track) {
      track.stop();
    });
  }

  var constraints = {
    video: {
      optional: [{
        sourceId: videoSelect.value
      }]
    }
  };

  navigator.mediaDevices.getUserMedia(constraints).
      then(gotStream).catch(handleError);
}

function gotStream(stream) {
  window.stream = stream; // make stream available to console
  videoElement.srcObject = stream;
}

function handleError(error) {
  console.log('Error: ', error);
}
Run Code Online (Sandbox Code Playgroud)

我的权限(可能比需要的还多)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="uk.co.babyvideolink.babyvideolink1">
    <!--Added 20/07 CB-->

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.CAPTURE_SECURE_VIDEO_OUTPUT" />
    <uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
    <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="true" />
    <uses-feature android:name="android.hardware.camera.front" android:required="true" />
    <uses-feature android:name="android.hardware.camera.level.full" android:required="true" />
    <uses-feature android:name="android.hardware.camera.capability.raw" android:required="true" />
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
    <uses-feature android:name="android.hardware.microphone" android:required="true" />
    <uses-feature android:name="android.hardware.camera2" android:required="true" />
    <uses-feature android:name="android.hardware.camera" android:required="true" />
Run Code Online (Sandbox Code Playgroud)

请注意,为了简洁起见,版权声明已从代码中删除。