如何将使用 MediaRecorder API 录制的视频保存到 php 服务器?
How to save video recorded with MediaRecorder API to php server?
我可以用网络摄像头录制视频,在浏览器上播放生成的 blob,然后将其下载到本地计算机上,但是当我将文件保存到服务器时,它是不可读的。我试过将块发送到服务器并在那里连接它们,还发送了整个 blob,但结果是一样的(视频不可读)。
我首先使用 FileReader() 读取 blob,它给出了 base64 结果,然后将其发送到服务器,在那里我 base64_decode() 它并将其保存到一个文件夹中。
JS代码:
var reader = new FileReader();
reader.readAsDataURL(chunks[index]);
reader.onload = function () {
upload(reader.result, function(response){
if(response.success){
// upload next chunk
}
});
};
在服务器上:
$json = json_decode( $request->getContent(), true );
$chunk = base64_decode( $json["chunk"] );
// all chunks get
file_put_contents("/uploadDirecotry/chunk".$json['index'].".webm", $json["chunk"]);
当所有区块都上传完毕后:
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");
}
我不知道我做错了什么。我已经尝试了一个多星期来让它工作,但它不会。请帮忙!
你必须保存解码的块
而不是这个
file_put_contents("/uploadDirecotry/chunk".$json['index'].".webm", $json["chunk"]);
使用这个
file_put_contents("/uploadDirecotry/chunk".$json['index'].".webm", $chunk);
此外,我建议,请在写入模式下打开 "for loop" 之前的最终文件,并在循环后关闭它,而不是每次都在 "for loop" 中重新打开。
我可以用网络摄像头录制视频,在浏览器上播放生成的 blob,然后将其下载到本地计算机上,但是当我将文件保存到服务器时,它是不可读的。我试过将块发送到服务器并在那里连接它们,还发送了整个 blob,但结果是一样的(视频不可读)。 我首先使用 FileReader() 读取 blob,它给出了 base64 结果,然后将其发送到服务器,在那里我 base64_decode() 它并将其保存到一个文件夹中。
JS代码:
var reader = new FileReader();
reader.readAsDataURL(chunks[index]);
reader.onload = function () {
upload(reader.result, function(response){
if(response.success){
// upload next chunk
}
});
};
在服务器上:
$json = json_decode( $request->getContent(), true );
$chunk = base64_decode( $json["chunk"] );
// all chunks get
file_put_contents("/uploadDirecotry/chunk".$json['index'].".webm", $json["chunk"]);
当所有区块都上传完毕后:
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");
}
我不知道我做错了什么。我已经尝试了一个多星期来让它工作,但它不会。请帮忙!
你必须保存解码的块
而不是这个
file_put_contents("/uploadDirecotry/chunk".$json['index'].".webm", $json["chunk"]);
使用这个
file_put_contents("/uploadDirecotry/chunk".$json['index'].".webm", $chunk);
此外,我建议,请在写入模式下打开 "for loop" 之前的最终文件,并在循环后关闭它,而不是每次都在 "for loop" 中重新打开。