视频流在 webview 上暂停

问题描述 投票:0回答:1

我添加了这些权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.SYSTEM_CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.webkit.PermissionRequest" />

网络视图设置:

myWebView.setWebChromeClient(new WebChromeClient() {
  @Override
  public void onPermissionRequest(final PermissionRequest request) {
    StartpgActivity.this.runOnUiThread(new Runnable() {
      @Override
      public void run() {
        if (request.getOrigin().toString().equals("file:///")) {

          request.grant(request.getResources());
        } else {

          request.deny();
        }
      }
    });
  }

});
webview1.loadUrl("file:///android_asset/camTheme.html");
}

        _webview.getSettings().setEnableSmoothTransition(true);
        _webview.getSettings().setMediaPlaybackRequiresUserGesture(false);
        _webview.getSettings().setDomStorageEnabled(true);
        _webview.getSettings().setAllowFileAccess(true);
        _webview.getSettings().setDatabaseEnabled(true);
        _webview.getSettings().setSaveFormData(true);
        _webview.getSettings().setSupportZoom(true);
        _webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        _webview.getSettings().setUseWideViewPort(true);
        _webview.getSettings().setLoadWithOverviewMode(true);
        _webview.getSettings().setBuiltInZoomControls(true);
        _webview.getSettings().setDisplayZoomControls(true);
        _webview.getSettings().setAllowContentAccess(true);
        _webview.getSettings().setBuiltInZoomControls(true);
        _webview.getSettings().setAllowFileAccessFromFileURLs(true);
        _webview.getSettings().setAllowUniversalAccessFromFileURLs(true);
        _webview.getSettings().setJavaScriptEnabled(true);
        
        _webview.getSettings().setBuiltInZoomControls(true);
        _webview.getSettings().setDisplayZoomControls(false);
        _webview.getSettings().setLoadWithOverviewMode(true);
        _webview.getSettings().setUseWideViewPort(true);
        _webview.getSettings().setDatabaseEnabled(true);
        _webview.getSettings().setDomStorageEnabled(true);


资产文件夹中的 html 文件,使用 file:// :

<html allow='camera,microphone'>
 <head>
  <meta name='color-scheme' content='dark '>
  <title>set_title</title>
 </head>
 <style type="text/css">
  #container {
   margin: 0px auto;
   width: 500px;
   height: 375px;
   border: 10px #333 solid;
  }

  #videoElement {
   width: 500px;
   height: 375px;
   background-color: #777;
  }
 </style>
 <div id="container">
  <video autoplay="true" muted id="videoElement"></video>
 </div>
 <script type="text/javascript">
  var video = document.querySelector("#videoElement");
  navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;
  if (navigator.getUserMedia) {
   navigator.getUserMedia({
    video: true
   }, handleVideo, videoError);
  }

  function handleVideo(stream) {
   video.srcObject = stream;
   video.play();
  }

  function videoError(e) {
   document.write(e + ' < br > ');
   }
   setTimeout(() => {
    video.play();
   }, 500)
 </script>

^ 我相信这没有任何错误 [它在浏览器上完美运行]


但是视频流只播放了将近半秒,之后它只根据用户手势播放

但我确实指定了

webview.getSettings().setMediaPlaybackRequiresUserGesture(false);

它确实在 webview 上拖动手指时播放

那我该如何解决呢?

我如何在没有用户手势的情况下播放它?

android html android-webview android-camera
1个回答
0
投票

camera 使用一些 JavaScript 开始连续流式传输

index.html:

<html allow='camera,microphone' onclick='video.play()'>
<head>
<meta name='color-scheme' content='dark '>
<title>set_title</title>
</head>
<style type="text/css">
        #container {
            margin: 0;
            width: 100vw;
            height: 100vh;
            padding:0;
            overflow:hidden;
            display:grid;
            place-items:center;
            
        }

        #videoElement {
          -height: 100vh;
          width:100vw;
          background-color: #777;
        }
        button{
        font-size:9vw;
        width:20vw;
        height:12vw;
        border-radius:9vw;
        }
        
    </style>    
<div id="container">
            <video autoplay="true" muted id="videoElement"></video>
            <button onclick="
            (location.href).split('?')[1]==null?
            
            location.href=location.href+'?'
            :
            location.href=(location.href).split('?')[0]
            ">🔁</button>
          
        </div>
        
        <script type="text/javascript">
        cam=(location.href).split('?')[1]==null?'environment':'user';
          var video = document.querySelector("#videoElement");
          navigator.getUserMedia = navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia||navigator.oGetUserMedia;
    
          if(navigator.getUserMedia) {
            navigator.getUserMedia({video: { facingMode: { exact: cam }}}, handleVideo, videoError);
          }
    
          function handleVideo(stream) {
            video.srcObject=stream;
           
            x=setInterval(()=>{
            video.play();
            
            },10);
          }
    
          function videoError(e) {
             document.write(e+'<br>');
          }
          
        </script>

JavaScript 函数 setInterval 将在每
video.play()
毫秒调用
10

∴创造连续的流媒体体验

increase 10 to make video low fps

decrease 10 to make video high fps


必须有更好的方法来实现这一点

[with java]
。因为大多数浏览器(如基于 Chrome/chromium 的浏览器)都会这样做,而无需 setInterval

© www.soinside.com 2019 - 2024. All rights reserved.