0

我可以用網絡攝像頭錄製視頻,在瀏覽器上播放結果blob並將其下載到本地機器上,但是當我將文件保存到服務器時,它是無法讀取的。我已經嘗試將塊發送到服務器並將它們連接在一起,並且還發送了整個blob,但結果是相同的(不可讀的視頻)。 我首先用FileReader()讀取blob,它提供了base64結果,然後將其發送到服務器,在那裏我base64_decode()它並將其保存到文件夾。如何將使用MediaRecorder API錄製的視頻保存到php服務器?

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"); 
} 

我不知道我做錯了。我已經嘗試了一個多星期的工作,但它不會。請幫忙!

回答

0

你必須保存解碼塊

,而不是這個

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

使用本

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

而且我建議,請打開最終文件的「for循環」,在寫模式之前的並在循環之後關閉它,而不是每次都在「for循環」中重新打開。

+0

太棒了!非常感謝!一直在搞亂它,我已經多次更改了代碼,並且錯過了這個小小的錯字。此外,必須添加以下行: $ json [「chunk」] = str_replace('data:video/webm; base64,','',$ json [「chunk」]); 解碼之前,使其工作。 –

相關問題