0

以下は、ファイルをサーバーにアップロードし、アップロードされた各ファイルの名前をデータベースに保存するコードです。

<?php

 // connect to the database
 include('connect.php');

  /* check connection */
  if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
  }


    if ($_FILES['fileVideo']['error'] === UPLOAD_ERR_OK) { 

$result = 0;


if( file_exists("VideoFiles/".$_FILES['fileVideo']['name'])) {
    $parts = explode(".",$_FILES['fileVideo']['name']);
    $ext = array_pop($parts);
    $base = implode(".",$parts);
    $n = 2;

    while( file_exists("VideoFiles/".$base."_".$n.".".$ext)) $n++;
    $_FILES['fileVideo']['name'] = $base."_".$n.".".$ext;

    move_uploaded_file($_FILES["fileVideo"]["tmp_name"],
    "VideoFiles/" . $_FILES["fileVideo"]["name"]);
    $result = 1;

}
    else
      {
      move_uploaded_file($_FILES["fileVideo"]["tmp_name"],
      "VideoFiles/" . $_FILES["fileVideo"]["name"]);
      $result = 1;
  }

    $videosql = "INSERT INTO Video (VideoFile) 
    VALUES (?)";

        if (!$insert = $mysqli->prepare($videosql)) {
      // Handle errors with prepare operation here
    }

    //Assign the variable
$vid = 'VideoFiles/'.$_FILES['fileVideo']['name'];

            //Dont pass data directly to bind_param store it in a variable
$insert->bind_param("s",$vid);

 $insert->execute();
 $id = $mysqli->insert_id;

        if ($insert->errno) {
          // Handle query error here
        }

        $insert->close();     

        }else{
  echo "Upload was not successful";   
  }

?>

 <script language="javascript" type="text/javascript">
 window.top.stopVideoUpload(<?php echo $result; ?>,'<?php echo $id; ?>', '<?php echo $_FILES['fileVideo']['name']; ?>');
 </script>  

</body>
</html>

現在、jwplayer を使用していますが、このページのビデオ形式と一致するビデオ ファイルが必要です。

http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12539/supported-video-and-audio-formats/

そのため、ファイルがサーバーにアップロードされたときに、サーバー上でファイルを自動的にエンコードできるようにする必要があります。ユーザーがビデオ ファイルを自分で手動でエンコードしようとするのではなく、自動的にエンコードすることを望んでいます。しかし、私の質問は、サーバー側のファイルの自動エンコードを機能させるにはどうすればよいですか?

動画ファイルのアップロード方法を示すデモがあります: DEMO

デモを使用するには:

  1. ボタンをクリックするAdd Questionと、ファイル入力がテーブルに表示されます

  2. すぐにアップロードをクリックすると、どのビデオ ファイル形式が許可されているかを示す簡単な検証が表示されます (これは、ビデオ ファイルの拡張子を確認することによって簡単に行われます)。

  3. ビデオ ファイルを参照し、選択してクリックしUpload、アップロードが完了するまで待ちます (時間を節約するために短いビデオ ファイルをお勧めします)。ファイルがアップロードされると、成功メッセージが表示され、ビデオ ファイルがサーバーにアップロードされます。

4

1 に答える 1

3

それを行う多くの方法。プログラマーの時間の観点から最も簡単で最速なのは、ffmpegを使用して、アップロードスクリプト内で、使用可能なものに直接エンコードすることです(使用するexecsystem、そうするか)。

ただし、これにはいくつかの問題があります。サーバーがリクエストの処理でビジー状態になると、ブラウザがタイムアウトになる可能性があります。また、実際に負荷を分散することはできません。

したがって、アップロードが成功した後、ffmpegを呼び出します。

exec("ffmpeg -i $vid -vcodec libx264 -vpre default -crf 21 ".
                      "-acodec libfaac -ab 128k $vid-transcoded.mp4");

ffmpegすべてのオプションについては、Webサイトを参照する必要があります(オプションはたくさんあります)。また、jwplayerは非常に人気があるため、トランスコードする方法については多くのリソースが必要です。

したがって、別の解決策は、サーバーにディレクトリ内のファイルをアップロードさせ、そのディレクトリ内のto_be_processedすべてのファイルを処理するためのバックグラウンドプロセス(おそらくcronjob?)を持たせることです。このように、アップロードが完了し、処理リソースを完全に制御できるときに、ブラウザー要求が実行されます。ただし、これにはかなりのプログラマー時間がかかります。処理ジョブを作成する必要があります。また、処理の距離をユーザーに知らせるために、いくつかの管理作業を行う必要があります。

于 2013-01-28T19:32:41.460 に答える