I have a WORKING code to take a snapshot from the webcam and save it in PHP via ajax... but when I try with a resolution higher than 2000, safari mobile on iPhone crashes, why and how to fix this ?
here , If I do getUserMedia({ video:{width: { ideal: 2096
=> it's all ok
But if I fo getUserMedia({ video:{width: { ideal: 3096
=> it crashes :(
HTML
<video id="precam" playsinline="true" muted autoplay style="max-width:90%;" ></video>
<canvas id="canvax" ></canvas>
<div onclick="sendToServer('ajaxanswer');">SAVE</div>
<div onclick="webcamFRONT();">SWITCH TO FRONT CAM</div>
<div id="ajaxanswer" ></div>
JAVASCRIPT
<script>
const videoPlayer = document.querySelector("#precam");
const canvas = document.querySelector("#canvax");
function webcamREAR () {
navigator.mediaDevices.getUserMedia({ video:{width: { ideal: 2096 },facingMode: "environment"}, audio:false })
.then(stream => videoPlayer.srcObject = stream)
.catch(error => {console.error(error);});
}
function webcamFRONT () {
navigator.mediaDevices.getUserMedia({ video:{width: { ideal: 2096 },facingMode: "user"}, audio:false })
.then(stream => videoPlayer.srcObject = stream)
.catch(error => {console.error(error);});
}
function wcanvasim () {
canvas.width = videoPlayer.videoWidth; canvas.height = videoPlayer.videoHeight;
canvas.getContext("2d").drawImage(videoPlayer, 0, 0, canvas.width, canvas.height);
}
webcamREAR();
function sendToServer (divID) {
var pcache = (Math.floor(Math.random() * 100000000) + 1);
var params = "divID="+encodeURIComponent(divID)+"&canvablob="+encodeURIComponent(canvas.toDataURL());
var xhr = new XMLHttpRequest(); xhr.open("POST", "/file.php?pcache="+pcache, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function(e) { if (xhr.readyState == 4) { $("#"+divID).html(e.currentTarget.responseText) ; } }
xhr.send(params);
}
</script>
PHP
<?php
$whereTOdeBlob = '/path/to/server/'.mt_rand().'.png';
$canvablob = ( $_REQUEST['canvablob'] ?? '' ) ;
$canva64 = explode('base64,',$canvablob)[1] ?? '';
file_put_contents(INCLUDE_PATH_ROOT.$whereTOdeBlob,base64_decode($canva64));
// CONVERT TO JPG
// ADD TO DATABASE
// ANY STUFF YOU WANT ;)
echo '<img src="'.$canvablob.'" />';
?>
******* The question is : why large resolution makes safari mobile crash?