如何使用php在数据库BLOB中播放视频?

时间:2013-11-16 19:06:54

标签: php database video blob

我设法将视频(< 2MB)上传到我的桌面作为LONGBLOB类型。表名是test2中的test2。但我不能播放mp4视频。这是我的代码。

<?php
echo 'h';
$arr=array();
$con=mysql_connect('localhost','root','46');
mysql_select_db('test',$con);
$query="select video from test2";
$result=mysql_query($query,$con);
$arr=mysql_fetch_array($result);
header('content-type: video/mp4'); 
echo $arr[0];
?>

感谢。

3 个答案:

答案 0 :(得分:1)

您不应该立即从数据库中将整个视频提取到内存中,因为它会在客户端播放/下载时始终保留在内存中。随着更多的并发用户,每个PHP后端都会在内存中保留自己的视频副本。这将使您的服务器很快耗尽内存。

您可以在SQL查询中使用substr()以块的形式获取它,但这会给数据库带来更多负担。最好在将其插入数据库之前将其拆分为块。

或者,您知道,只需直接从Apache(或任何Web服务器)的文件系统中提供它,就像$ deity一样。

答案 1 :(得分:1)

我在搜索类似内容时偶然发现了这个问题。 如果你不想使用标题并在sql blob的div或其他html容器中播放,请执行以下操作:

function displayvideo(){
    global $db_user, $db_password, $media_db_name, $db_host;
    $video = "some_video.mp4";
    $dbconnect = 'mysql:dbname='.$media_db_name.';host='.$db_host.'';
    try {
        $db = new PDO($dbconnect, $db_user, $db_password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    if (($result = $db->query('SELECT video FROM videos WHERE `name` = "'.$video.'"')) !== false) {
        echo '<div content="Content-Type: video/mp4">
                  <video width="700" height="450" controls="controls" poster="image" preload="metadata">
                  <source src="data:video/mp4;base64,'.base64_encode($result->fetch(PDO::FETCH_COLUMN)).'"/>;
              </video>
          </div>';
    } else {
        // actions to take if it fails
    }
}

答案 2 :(得分:0)

如果您真的想将视频存储为数据库blob(我不建议这样做),这应该可行:

<?php
mysql_connect('localhost', 'root', '46') or die('Could not connect to MySQL server');
mysql_select_db('test') or die('Could not select database');

if (($result = mysql_query('SELECT video FROM test2')) !== false) {
    header('Content-Type: video/mp4'); 
    print mysql_result($result, 0);
} else {
    // actions to take if it fails
}

更好的是,您可能希望使用PDO来查询数据库:

<?php
$db = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', '46');

if (($result = $db->query('SELECT video FROM test2')) !== false) {
    header('Content-Type: video/mp4');
    print $result->fetch(PDO::FETCH_COLUMN);
} else {
    // actions to take if it fails
}