如何播放使用php存储im mysql blob的mp3音频

时间:2016-02-25 09:53:48

标签: php html mysql database blob

我使用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音频播放器来了,并没有播放任何东西

enter image description here

以下是我的phpMyAdmin中blob的外观 enter image description here

4 个答案:

答案 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'];
?>

这对我有用!!!!