如何使用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 '<audio controls>'; echo '<source src="data:audio/mp3;base64,'.base64_encode($row['sound']).'">'; echo '</audio>';'
但它不起作用...
我什至尝试过echo '<source src="data:audio/mp3;base64,'.base64_encode($sound).'">';
但即使这样也没有用
尝试将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音频的主要内容,如果未能解决你的问题,请参考以下文章