php - 从数据库中连续流式传输随机音频

标签 php javascript mysql html audio

我正在计划一个非常简单的音频流媒体项目,该项目将获取本地服务器上托管的歌曲的 mysql 数据库列表,然后全天不断地从列表中随机播放一首歌曲。这将附加到一个非常简单的前端页面,该页面将显示当前播放歌曲的名称。

我知道如何从数据库中获取随机文件并使用 Javascript/HTML 前端对其进行流式传输,但我不知道如何检测歌曲何时结束 - 然后加载下一首歌曲。有没有简单的方法可以做到这一点?有人可以指出我正确的方向吗?

编辑:为了详细说明前端,我很可能会通过 PHP 将文件名/位置提供到 HTML5 音频标签中(同样,我希望这尽可能简单)。我在想最简单的方法是播放音频文件然后刷新页面并使用相同的音频标签和新文件名播放下一个文件 - 我只是不知道如何在结束时导致该事件发生这首歌。或者,如果需要,我可以使用基于 Javascript 的播放器,如 JPlayer (http://www.jplayer.org/)。

我猜想有某种回调函数可以与 JQuery 结合使用?

最佳答案

HTML5 音频标签有一个事件“onended”,它在媒体播放结束时运行,但既然你想继续播放,你应该使用“onwaiting”事件,它也会在媒体播放结束时触发,但保持本身准备好接受新的轨道/数据。

然后您可以使用 XMLHttpRequest 对象来查询要播放的下一首轨道,例如。

<script type="text/javascript">
  function getNextTrack(e) {
    var xhttp = new XMLHttpRequest();
    xhttp.open("GET", "next_track.php", false);
    xhttp.send("");

    var playback = xhttp.responseXML.childNodes[0];
    for(i = 0; i < playback.childNodes.length; ++i) {
      if (playback.childNodes[i].nodeName != 'track') continue;
      var value = playback.childNodes[i].childNodes[0].nodeValue;
      e.currentTarget.src = value;
      break;
    }
  }
</script>
<audio id="player" onwaiting="javascript: getNextTrack(e)" src="first_track.ogg"></audio>

xml 将采用以下形式:

<?xml version="1.0" encoding="UTF-8" ?> 
<playback> 
    <track>next_song.ogg</track>
</playback>

关于php - 从数据库中连续流式传输随机音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097339/

相关文章:

php - 使用一个 SQL 请求更新多行

javascript - IE9 将上下文 'this' 转换为对象

mysql - 如何使用 mysqldump 导出限制和偏移量

php - Laravel artisan 迁移错误

php - 角色管理 Symfony 和 NodeJs

php - 在php中显示具有不同名称和一个后缀的所有 session

PhpStorm:如何分离 PHP 和 HTML 缩进

php - 提交后隐藏html表单?

javascript - JavaScript 如何确定用户的时区?

php - 如何将变量从数据库查询传递到 PHP 函数