0

ウェブカメラでビデオを録画し、結果のBLOBをブラウザで再生してローカルマシンでダウンロードすることができますが、ファイルをサーバーに保存するとそのファイルは読めません。私はサーバーにチャンクを送信しようとし、そこにそれらを連結し、全体のブロブを送信しようとしましたが、結果は同じ(読み取り不可能なビデオ)です。 まずFileBufferをFileReader()で読み込み、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"); 
} 

を私は私が間違っているのかわかりません。私はそれを働かせるために一週間以上努力してきましたが、それはできません。助けてください!あなたの代わりにこの

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

はまた、私は提案し、書き込みモードでは、あなたの「forループ」の前に最終的なファイルを開いてください。この

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

使用の復号化されたチャンク

を保存する必要が

答えて

0

"for loop"で毎回再オープンするのではなく、ループの後でクローズしてください。

+0

素晴らしい!どうもありがとう!それをたくさん回り込んで、コードを何度か変更してしまい、この小さな誤字を逃してしまった。また、次の行を追加する必要がありました。 $ json ["chunk"] = str_replace( 'data:video/webm; base64、'、 ''、$ json ["chunk"]);デコードする前に 、それを動作させる。 –