2016-01-12 94 views
3

我正在开发一个让用户将视频文件上传到服务器的学校项目。服务器将使用ffmpeg压缩视频并将文件存储在上传文件夹中。其他用户将能够流式传输上传的视频。PHP将视频文件上传到数据库

我的问题是我如何检索ffmpeg生成的视频并将链接存储在数据库中?

我使用此代码,但它只检索原始视频的路径。 upload.php的

$filePath = dirname(__FILE__); 

部分代码

$target_dir = "upload/"; //where you want to upload the files to 
$target_file = $target_dir.basename($_FILES['file']['name']); 
$fileType = pathinfo($target_file, PATHINFO_EXTENSION); 
$newFileName = $target_dir.sha1(pathinfo(basename($_FILES['file']['name']), PATHINFO_FILENAME)).'-'.time().'.'.$fileType; 
move_uploaded_file($_FILES['file']['tmp_name'], $newFileName); 
$unique_id = rand(1000000,9999999); 

shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -i ".$newFileName." -vcodec libx264 -crf 20 \"upload\\{$newFileName}\" > logfile.txt 2>&1"); 

/// save information into database 
       $username = "root"; 
       $password = ""; 
       $hostname = "localhost"; 
       $dbname = "test_database"; 

       //connect to the database 
       $dbc = mysqli_connect($hostname, $username, $password, $dbname) or die ("could not connect to the database"); 

       //execute the SQL query and return records 
       $result = mysqli_query($dbc, "INSERT INTO `viewvideo` (`vID`, 'video_id`, `video_link`) VALUES ('', '".$unique_id."', '".$newFileName."')"); 

       if(!$result){echo mysqli_error($dbc); } 

       echo $result; 

      /* 
       declare in the order variable 
       $result = mysqli_query($dbc, $sql); //order executes 
       if($result){ 
        echo("<br>Input data is succeed"); 
       } else{ 
        echo("<br>Input data is fail"); 
       } 
      */ 

       //close the connection 
       mysqli_close($dbc); 

输出 enter image description here

+0

看看这里的错误***它告诉你一切的起点,你***有失踪蜱'\''的' video_id'列。 –

回答

0

记住要上传的文件移动到您选择的目录。防止文件互相覆盖的一种方法是为它创建一个新名称。上传成功时执行此操作。

正确上传&添加视频到数据库

$target_dir = "video/"; //where you want to upload the files to 
$target_file = $target_dir.basename($_FILES['file']['name']); 
$fileType = pathinfo($target_file, PATHINFO_EXTENSION); 
$newFileName = $target_dir.sha1(pathinfo(basename($_FILES['file']['name']), PATHINFO_FILENAME)).'-'.time().'.'.$fileType; 
move_uploaded_file($_FILES['file']['tmp_name'], $newFileName); 

之后,你必须创建一个表&插入两个核心的东西;为视频和$newFileName路径生成唯一/令牌生成的ID。

您可以使用它生成令牌/ ID,包括字母数字字符或简单的东西,因为这 $unique_id = rand(1000000,9999999);

的功能让我们考虑你有一个表videos 3列; vIDvideo_id & video_link

vID应该是一个自动递增INT。 video_id将是INT和video_link TEXT类型。

之后,它是SQL。

$result = mysqli_query($db_connection, "INSERT INTO `videos` (`vID`, video_id`, `video_link`) VALUES ('', '".$unique_id."', '".$newFileName."'"); 
if(!$result){echo mysqli_error($db_connection); } 

检索它会是这样的。请务必在另一页上添加此项。让我们考虑将stream.php作为流式传输视频的页面名称。

if(isset($_GET['id'])){ 
    $id = trim($_GET['id']); 
    //check if it exists 
    $result = mysqli_query($db_connection , "SELECT `video_id`, `video_link` FROM `videos` WHERE `video_id`='".$id."'"); 
    $count = mysqli_num_rows($result); 
    //does it exist? 
    if($count>0){ 
     //exists, so fetch it in an associative array 
     $video_arr = mysqli_fetch_assoc($result); 
     //this way you can use the column names to call out its values. 
     //If you want the link to the video to embed it; 
     echo "Video Link: ".$video_arr['video_link']; 
    }else{ 
     //does not exist 
    } 
} 

最后,创建一个链接:http://your-website.com/stream.php?id=video id here

+0

我不能使用move_uploaded_file,因为ffmpeg已经将视频文件移动到dest位置。任何其他建议? –

+0

首先将文件上传和其移动到新位置,然后** **使用的ffmpeg对其进行压缩。另外,添加了检索部分。 –

+0

所以它会是这样的:'了shell_exec:( “C \\ \\的ffmpeg斌\\ ffmpeg.exe -i” $ newFileName“-vcodec libx264 -crf 20" 。)固定。 ' –