前回は、iPhone端末からフレーム画像をアップロードする際の改善方法についてご紹介しました。
今回は、実際にアップロードした画像から動画を作成してみたいと思います。
本記事の最終目的は、ストリーミング再生なので、動画を複数作成して、順次再生する必要があります。
※こちらは、現状の予定なので、今後方針が変更になるかも知れません。
対応する方針としては、下記となります。
・アップロードされた画像を50枚単位でディレクトリを作成し格納
・格納後、ディレクトリに格納されている画像から動画を作成
・動画を作成後、ディレクトリ内にある画像は不要なので、削除
それでは、実際にサーバへアップロードした画像から動画を作成してみましょう。
<アップロードされた画像から動画を作成する方法>
【前提条件】
・開発環境は、前回作成したプロジェクトを利用すること
・サーバ環境は、MAMP
※Windowsの方は、XAMPでも可
【手順1】
サーバへアップロードされた画像から動画を作成します。
上述した対応方針に従って、プログラムを作成しました。
※画像の保存方法や動画の作成する方法は、[Oculus]3D動画をストリーミング再生する方法 – 4 –で
詳しくご紹介しているので、そちらを見ていただければと思います。
<?php $flg = true; if(is_uploaded_file($_FILES["postfile"]["tmp_name"])) { //ディレクトリ名を作成する $num = intval(str_replace(".jpg", "", $_FILES["postfile"]["name"])); $directoryNumber = floor($num / 50); //ディレクトリパスを作成する $directoryPath = "/Applications/MAMP/htdocs/upload/file/" . $directoryNumber; //ディレクトリが存在するかチェックを行う if(!file_exists($directoryPath)) { //ディレクトリを作成する if(!mkdir($directoryPath, 0777)) { $flg = false; } } if(true == $flg) { $fileName = $_FILES["postfile"]["name"]; if(49 < $num) { $fileNum = $num - ($directoryNumber * 50); $fileName = sprintf("%08d.jpg", $fileNum); } //動画を保存する if (move_uploaded_file($_FILES["postfile"]["tmp_name"], $directoryPath . "/" . $fileName)) { echo 'image save success!!!'; } else { echo 'image save not success!!!'; } //1つ前のディレクトリ名を取得する $directoryForMovie = $directoryNumber - 1; //動画を作成する if(0 <= $directoryForMovie) { $imageDirectoryPath = "/Applications/MAMP/htdocs/upload/file/" . $directoryForMovie; //ディレクトリが存在するかチェックを行う if(file_exists($imageDirectoryPath)) { exec("ffmpeg -r 30 -i " . $imageDirectoryPath . "/%08d.jpg /Applications/MAMP/htdocs/upload/movie/" . $directoryForMovie . ".mp4"); //ディレクトリ毎削除する foreach(glob($imageDirectoryPath . "/*") as $file) { if(is_dir($file)){ removeDir($file); }else{ unlink($file); } } rmdir($imageDirectoryPath); } } } } ?>
これで、アップロードされた画像から動画を作成するプログラムが完成しました。
それでは、実際にiPhoneからアプリを起動して動作確認をしてみましょう。
【手順1】
「動画撮影開始」ボタンをタップし、カメラを起動します。
【手順2】
画面が表示されます。
【手順3】
サーバに動画が作成されていることを確認します。
お疲れ様でした。
アップロードされた画像から動画を作成することができたので、今回は終了いたします。
最後までご覧いただきありがとうございました。
弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。