【问题标题】:How to save video recorded with MediaRecorder API to php server?如何将使用 MediaRecorder API 录制的视频保存到 php 服务器?
【发布时间】:2017-08-28 11:09:34
【问题描述】:

我可以使用网络摄像头录制视频,在浏览器上播放生成的 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");
}

我不知道我做错了什么。我已经尝试了一个多星期来让它工作,但它不会。请帮忙!

【问题讨论】:

标签: javascript php mediarecorder web-mediarecorder mediarecorder-api


【解决方案1】:

你必须保存解码的块

而不是这个

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

使用这个

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

另外我建议,请在“for循环”之前以写入模式打开最终文件并在循环后关闭它,而不是每次都在“for循环”中重新打开。

【讨论】:

  • 太棒了!非常感谢!一直在搞乱它,我已经多次更改代码,并错过了这个小错字。另外,必须添加这一行: $json["chunk"] = str_replace('data:video/webm;base64,', '', $json["chunk"]);在解码之前,使其工作。
猜你喜欢
  • 2014-08-02
  • 2013-04-08
  • 2020-06-21
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多