这几天我一直在挠头,
我正在为与呼叫跟踪相关的客户端构建一个 Web 应用程序。该系统的一个方面是允许从消息详细信息旁边的“播放”按钮直接播放简短的录制语音邮件消息。
我正在访问这样的声音文件;
$wavefile=$calls_row['recording'];
if (file_exists("/var/spool/asterisk/monitor/".$calls_row['recording'].".wav")){
$wavefile="
<form>
<input type=\"button\" value=\"Play\" onClick=\"PlaySound('clip-".$stat_id."')\" />
</form>
<embed src=\"pass-thru.php?f=".$calls_row['recording'].".wav\" autostart=\"false\" width=\"0\" height=\"0\" id=\"clip-".$stat_id."\" enablejavascript=\"true\" />
";
}
声音剪辑存储在网络根目录之外的一个目录中,我被告知我们不能更改。由于无法在本地获取文件,我整理了一个小的 php 传递脚本,将文件传回给我的网页。
声音剪辑在播放之前使用一小段javascript来获取指定文件的链接ID;
function PlaySound(soundobj) {
var thissound=document.getElementById(soundobj);
thissound.Play();
}
这些文件在 webroot 之外访问,并通过以下 php 代码传递给 html;
$basedir = '/var/spool/asterisk/monitor';
$clip = $_GET['f'];
$file = $basedir.'/'.$clip;
$ext = array_pop(explode ('.', $file));
if(file_exists($file) && $ext != '' && isset($allowed[strToLower($ext)])) {
$type = $allowed[strToLower($ext)];
}
header("Content-type: audio/x-wav");
header("Content-Disposition: filename='{$file}'");
header("Content-Transfer-Encoding: binary");
header('Content-Length: ' . filesize($file));
readfile($file);
exit();
一切正常,剪辑通过并且声音剪辑在浏览器中播放。
问题是当页面加载时所有的声音剪辑都被加载到缓存中,这显然会减慢速度。我对结果进行了分页,因此一次只能下载 25 个,但我真的很想拥有指向可用声音剪辑的链接,并且只有在选择播放时才会下载它们。
任何想法,将不胜感激。