JavaScriptを使用したQRコードリーダーで作業しています。 ユーザが私のWensiteにいる場合、カメラの使用を許可するかどうかを尋ねます。ユーザーがそれを受け入れるとすぐに、それは仲間のcamaraをオンにします。私は最新のChromeバージョンでSamsung Galaxy S4を使用していますが、これまでのところうまくいきます。DOMException:play()はユーザージェスチャーによってのみ開始されます
私は、フロントからリアに変更するドロップダウンを追加しました。 すぐに私はカメラを変更するビデオストリームが停止し、私はこのエラーが発生します。
未知(約束)DOMException:play()は、 ユーザジェスチャによってのみ開始できます。
古いバージョンのChromeで試したところ、camareの変更でもうまくいきました。
var videoElement = document.createElement("video");
var videoSelect = document.querySelector("select#videoSource");
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
function start() {
if (window.stream) {
videoElement.src = null;
window.stream.stop();
}
var videoSource = videoSelect.value;
var tw = 640 // 320 // 640 // 1280;
var th = 480 // 240 // 480 // 720
var hdConstraints = {
audio: false,
video: {
mandatory: {
maxWidth: tw,
maxHeight: th
},
optional: [{
sourceId: videoSource
}]
}
};
if (navigator.getUserMedia) {
navigator.getUserMedia(hdConstraints, success, errorCallback);
} else {
errorCallback("");
}
}
videoSelect.onchange = start;
start();
function gotSources(sourceInfos) {
for (var i = 0; i !== sourceInfos.length; ++i) {
var sourceInfo = sourceInfos[i];
var option = document.createElement("option");
option.value = sourceInfo.id;
if (sourceInfo.kind === "video") {
option.text = sourceInfo.label || "camera " + (videoSelect.length + 1);
videoSelect.appendChild(option);
} else {
console.log("Some other kind of source: ", sourceInfo);
}
}
}
if (typeof MediaStreamTrack === "undefined") {
alert("This browser does not support MediaStreamTrack.\n\nTry Chrome.");
} else {
MediaStreamTrack.getSources(gotSources);
}
function errorCallback(e) {
console.log("Cant access user media", e);
}
function success(stream) {
window.stream = stream;
videoElement.src = window.URL.createObjectURL(stream);
videoElement.onclick = function() { videoElement.play(); };
videoElement.play(); //Here is the Error
function getFrame() {
requestAnimationFrame(getFrame);
if (!videoElement.videoWidth) return;
if (!image) {
width = videoElement.videoWidth, height = videoElement.videoHeight;
log("videoElement", width, height, videoElement);
var canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
canvas.style.transform = "scale(1, 1)";
ctx = canvas.getContext("2d");
document.body.appendChild(canvas);
log("start");
image = Module._xsetup(width, height);
log("_xsetup", image, "pointer");
return;
}
ctx.drawImage(videoElement, 0, 0, width, height);
var imageData = ctx.getImageData(0,0, width, height);
data = imageData.data;
gofill();
}
getFrame();
}
はまだ動作しません。 Video要素が黒いフィールドに変わります。私が知っているように、ユーザーの帯域幅を節約するために自動再生はGoogleから無効になっています。奇妙なことは古いバージョンにあります。それは私に、変更に関するcamaraの許可も求めました。最新のバージョンではそうではありません。私の場合は – Ovoxo
で、Android用Chromeでは「クリック」は呼び出されません。タッチスクリーンで機能する唯一のイベントタイプは、 "touchstart"または "touchend"です。残念ながら、これらのイベントでは同じDOMExceptionが返されます。 Androidはtouchstart/touchendをユーザージェスチャーとして扱わないようです。 – mchiasson