【问题标题】:how to play mp3 audio stored im mysql blob using php如何使用php播放存储在mysql blob中的mp3音频
【发布时间】: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>
  • 不……我不知道该怎么做……你能举个例子吗

标签: php html mysql database blob


【解决方案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 的列的名称

      【讨论】:

      • 包含什么?这个答案看起来你失去了兴趣并放弃了一部分
      猜你喜欢
      • 1970-01-01
      • 2019-07-31
      • 2012-06-17
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 2019-08-28
      相关资源
      最近更新 更多