Одна из наших систем имеет возможность вернуть запись в виде данных большого двоичного объекта.Описание из документации:
GET для элемента возвращает двоичный двоичный объект записи с типом содержимого "audio / x-wav".
Когда ясохранить эти данные в файл 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-объектов в аудиоэлементе:
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.