0

Je peux enregistrer une vidéo avec la webcam, lire le blob résultant sur le navigateur et le télécharger sur la machine locale, mais lorsque je sauvegarde le fichier sur le serveur, il est illisible. J'ai essayé d'envoyer les morceaux au serveur et de les concaténer, et aussi d'envoyer le blob entier, mais le résultat est le même (vidéo illisible). J'ai d'abord lu les blobs avec un FileReader(), qui donne un résultat base64, puis l'envoie au serveur, où je base64_decode() et l'enregistre dans un dossier.Comment enregistrer une vidéo enregistrée avec MediaRecorder API sur un serveur php?

Code JS:

var reader = new FileReader(); 
reader.readAsDataURL(chunks[index]); 
reader.onload = function() { 
    upload(reader.result, function(response){ 
    if(response.success){ 
     // upload next chunk 
    } 
    }); 
}; 

sur le serveur:

$json = json_decode($request->getContent(), true); 
$chunk = base64_decode($json["chunk"]); 
// all chunks get 
file_put_contents("/uploadDirecotry/chunk".$json['index'].".webm", $json["chunk"]); 

Lorsque tous les morceaux sont téléchargés:

for ($i = 0; $i < $nrOfChunks; $i++) { 
    $file = fopen("/uploadDirectory/chunk".$i.".webm", 'rb'); 
    $buff = fread($file, 1024000); 
    fclose($file); 

    $final = fopen("/processed/".$video->getFileName()."-full.webm", 'ab'); 
    $write = fwrite($final, $buff); 
    fclose($final); 

    unlink("/uploadDirectory/chunk".$i.".webm"); 
} 

Je ne sais pas ce que je fais mal. J'ai essayé pendant plus d'une semaine pour que cela fonctionne, mais ce ne sera pas le cas. S'il vous plaît aider!

Répondre

0

vous devez enregistrer morceau décodé

au lieu de cette

file_put_contents("/uploadDirecotry/chunk".$json['index'].".webm", $json["chunk"]); 

utilisent ce

file_put_contents("/uploadDirecotry/chunk".$json['index'].".webm", $chunk); 

Je suggère également, s'il vous plaît ouvrir fichier final avant "boucle" en mode d'écriture et fermez-le après la boucle, au lieu de rouvrir à chaque fois dans "for loop".

+0

Excellent! Merci beaucoup! J'y ai beaucoup tripoté et j'avais changé le code plusieurs fois, et j'avais raté cette petite faute de frappe. Aussi, a dû ajouter cette ligne: $ json ["chunk"] = str_replace ('données: video/webm; base64,', '', $ json ["chunk"]); avant le décodage, pour le faire fonctionner. –