我正在尝试播放使用BLOB格式存储在数据库中的视频。我正在使用PHP连接到数据库。到目前为止,这是我设法提出的脚本,我该怎么做才能播放视频?
<!DOCTYPE html>
<html>
<body>
<video width="420" height="345" controls>
<source src="C:\Users\Administrator\Downloads\AustralianOpen.mp4" type="video/mp4">
</video>
<?php
$username="root";
$password="mysql";
$database="test";
mysql_connect('localhost', $username, $password) or die("Not able to connect to localhost");
mysql_select_db($database) or die("Unable to select DB");
if(($result=mysql_query('Select data from media'))!=false)
{
header('Content-Type: video/mp4');
print $result->fetch(PDO::FETCH_COLUMN);
} else
{
die("Video no connecting");
}
?>
</body>
</html>
答案 0 :(得分:3)
由于涉及的文件大小,将视频存储在数据库中是一个非常糟糕的主意。在这种情况下,正在发生的是fetch()
将整个内容从数据库缓冲区传输到PHP的内存中,然后从echo
开始。这意味着您需要立即将整个视频放入内存,并且需要在PHP的时间限制到期之前将其传输到Web服务器。这可能适用于非常小的视频,但不适用于任何值得观看的视频。
像Postgres这样的某些数据库允许您打开数据库中内容的文件句柄,然后可以使用fpassthru
将其直接转储到客户端;这是更有效的内存,但仍然需要PHP在客户端流视频的整个过程中运行。我也不确定MySQL是否支持它,从未使用它。
最后但并非最不重要的是,您无法将视频数据转储到HTML文件的中间。
更不用说由于某种原因,您混合了各种不属于一起的数据库API语法。
总的来说,这是一个糟糕的方法。您应该返回提供存储在磁盘上的视频文件,Web服务器可以自行处理。