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

Posted

技术标签:

【中文标题】如何使用php播放存储在mysql blob中的mp3音频【英文标题】:how to play mp3 audio stored im mysql blob using php 【发布时间】:2016-06-08 00:30:59 【问题描述】:

我使用 phpMyAdmin 将 100kb 的 mp3 小文件作为 blob 存储在 mysql db 中

但是我无法在 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 音频播放器来了,不播放任何东西

这是 blob 在我的 phpMyAdmin 中的外观

【问题讨论】:

你能告诉我们你正在测试的blob内容的内容吗? 是的..但是如何...我对 mysql 和 php 完全陌生 @BenPearlKahan 你能帮帮我吗……我真的被困在这里,非常需要帮助…… 在输出 blob 之前是否尝试过 base64_encode?​​span> 不……我不知道该怎么做……你能举个例子吗 【参考方案1】:

您正在尝试将音频源设置为数据 uri,并在其中指定数据是 base64 编码但使用二进制数据。 您必须将其转换为 base64 编码数据

echo    '<source src="data:audio/mpeg;base64,'.base64_encode($row['sound']).'">';

【讨论】:

我试过了,但它不起作用...音频播放器仍然灰显,我无法播放任何东西。 echo '&lt;audio controls&gt;'; echo '&lt;source src="data:audio/mp3;base64,'.base64_encode($row['sound']).'"&gt;'; echo '&lt;/audio&gt;';' 但它不起作用... 我什至尝试过echo '&lt;source src="data:audio/mp3;base64,'.base64_encode($sound).'"&gt;'; 但即使这样也没有用 尝试将mime类型更改为audio/mpeg 没什么区别,播放器只是灰显...可以给你完整的代码..我需要帮助...【参考方案2】:

除了你的数据库没有在 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】:

试试这个。

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

这对我有用!!!!

【讨论】:

【参考方案4】:

正确的形式如下::

<audio controls="controls" preload="metadata" autoplay>
    <source src="data:audio/mpeg;base64,<?php echo base64_encode($row['audio']); ?>"/>
</audio>

只需更改包含 blob 的列的名称

【讨论】:

包含什么?这个答案看起来你失去了兴趣并放弃了一部分

以上是关于如何使用php播放存储在mysql blob中的mp3音频的主要内容,如果未能解决你的问题,请参考以下文章

MySQL PHP没有将完整文件存储到BLOB

显示存储为 MySQL 数据库中 BLOB 数据的所有图像

如何在 Angular 5 中解析和播放数据库中的 Blob/二进制数据

PHP显示来自MySQL的图像BLOB [重复]

如何在 php 中从 BLOB 创建/保存文件?

使用PHP加密图像以便在MySQL BLOB中存储然后解密和打印