我添加了这些权限:
<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 上拖动手指时播放
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>
video.play()
毫秒调用 10
∴创造连续的流媒体体验
increase 10 to make video low fps
decrease 10 to make video high fps
必须有更好的方法来实现这一点
[with java]
。因为大多数浏览器(如基于 Chrome/chromium 的浏览器)都会这样做,而无需 setInterval