我设法将视频(< 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];
?>
感谢。
答案 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
}