我们的系统之一具有将记录作为blob数据返回的功能。文档中的描述:
项目的GET返回内容类型为“ audio / x-wav”的录音的二进制blob。
当我将这些数据保存到wav文件中时,它是可播放的,但是我不想存储它,而是使用它来从网站上播放该文件。
返回的数据是原始数据,例如:
RIFF�WAVEfmt 1@YA@factddataP͗�"���Ɩۖb�V�3Ԅe��8�W�@�đ#���h�"����o�ml��D�miG�F��Rˑ �YST@��I#i�S��TT��Dr�H@47.ݧ��M�D��$���-�9n�\+1� ���) ����)S�`\ő!I,�$��Y�`䘑$��#�P&��_�r����QE �i
我尝试将其转换为Blob-URL,但未成功。使用PHP Curl提取数据。
使用:
file_put_contents('vm.wav', $API->getVoicemail(96));
将存储文件并使其可播放。我用来使Blob数据可在Audio Element中播放的代码是:
var wavString = "<? echo base64_encode($API->getVoicemail(96)) ?>";
// var wavString = "<? echo $API->getVoicemail(96) ?>"; // Alternative, but makes the script crash due to the symbols
var len = wavString.length;
var buf = new ArrayBuffer(len);
var view = new Uint8Array(buf);
for (var i = 0; i < len; i++) {
view[i] = wavString.charCodeAt(i) & 0xff;
}
var blob = new Blob([view], {type: "audio/x-wav"});
var url = URL.createObjectURL(blob);
console.log(url);
var wave = new Audio();
wave.controls = true;
wave.src = url;
document.body.appendChild(wave);
不幸的是,没有成功...关于如何使它正常工作的任何想法?
编辑:
我尝试创建一个名为fetch.php的额外文件,将该元素设置为源文件。下面是代码:
<?php
$vmID = $_GET['id'];
$cvm = curl_init();
curl_setopt($cvm, CURLOPT_USERPWD, 'username:password');
curl_setopt($cvm, CURLOPT_URL, "https://url.to.server/api/vms/". $vmID);
curl_setopt($cvm, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cvm, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($cvm, CURLOPT_SSL_VERIFYPEER, false);
$vmgetheaders = array();
$vmgetheaders[] = "Connection: close";
curl_setopt($cvm, CURLOPT_HTTPHEADER, $vmgetheaders);
$vmgetresult = curl_exec($cvm);
if (curl_errno($cvm)) {
$vmgetresult = 'Error:' . curl_error($ch);
}
curl_close ($cvm);
echo $vmgetresult;
?>
浏览fetch.php?id = 1页面时,结果为:
RIFF�WAVEfmt 1@YA@factddataP͗�"���Ɩۖb�V�3Ԅe��8�W�@�đ#���h�"����o�ml��D�miG�F��Rˑ �YST@��I#i�S��TT��Dr�H@47.ݧ��M�D��$���-�9n�\+1� ���) ����)S�`\ő!I,�$��Y�`䘑$��#�P&��_�r����QE �i
但是在元素中尝试时,什么也没有发生。这是我用于该元素的代码:
<audio src="https://url/fetch.php?id=96" controls>
Your browser does not support the <code>audio</code> element.
</audio>
“网络”标签的控制台中没有出现错误,也没有发生PHP错误。