我使用phpMyAdmin
将mysql db中的小100kb mp3文件存储为blob但是我无法在html上输出它并播放音频......这是我的代码
require ('mysqli_connect.php'); //contains database connection
$sql="SELECT sound FROM english WHERE eWord LIKE '%" . $name . "%' OR kWord LIKE '%" . $name ."%'";
while($row=mysql_fetch_array($result)){
$sound=$row['sound'];
echo '<audio controls>';
echo '<source src="data:audio/mp3;base64,'.$row['sound'].'">';
echo '</audio>';
实际发生的是在xampp localhost中加载页面时 灰色的html音频播放器来了,并没有播放任何东西
答案 0 :(得分:4)
您正在尝试将音频源设置为数据uri,并在其中指定数据是base64编码但使用二进制数据。
您必须将其转换为base64编码数据
echo '<source src="data:audio/mpeg;base64,'.base64_encode($row['sound']).'">';
答案 1 :(得分:1)
正确的表格如下::
<audio controls="controls" preload="metadata" autoplay>
<source src="data:audio/mpeg;base64,<?php echo base64_encode($row['audio']); ?>"/>;
</audio>
只需更改包含
的列的名称答案 2 :(得分:0)
除了你的数据库没有在blob中返回正确的数据之外,试试这个:
function processmusic($song){
global $db_user, $db_password, $db_name, $db_host;
$dsn = 'mysql:dbname='.$db_name.';host='.$db_host.'';
try {
$db = new PDO($dsn, $db_user, $db_password);
} catch (PDOException $e) {
return 'Connection failed: ' . $e->getMessage();
}
if (($result = $db->query('SELECT music FROM music WHERE `name` = "'.$song.'"')) !== false) {
return '<div content="Content-Type: audio/mp3">
<audio controls="controls" preload="metadata" autoplay>
<source src="data:audio/mp3;base64,'.base64_encode($result->fetch(PDO::FETCH_COLUMN)).'"/>;
</audio>
</div>';
} else {
// actions to take if it fails
}
}
我发现PDO方法适用于视频和音频,而没有它我只有问题。我唯一的问题是我不能在歌曲中跳过时间。它播放但计时器在最右边计数。这是我在经过一些试验和错误后使用的浏览器的限制。
答案 3 :(得分:0)
试试这个。
<?php
include 'connect.php';
$id=1 //id of the music file
$query = mysqli_query($con,"SELECT content FROM music WHERE id='$id'");
$row = mysqli_fetch_assoc($query);
header("Content-type: audio/mp3");
header("Content-transfer-encoding:binary");
header("Accept-Ranges:bytes");
echo $row['content'];
?>
这对我有用!!!!