Как остановить загрузку встроенных аудиоклипов в кеш браузера до того, как их попросят воспроизвести? - PullRequest
1 голос
/ 29 июня 2011

Я несколько дней ломал голову над этим,

Я создаю веб-приложение для клиента, связанного с отслеживанием вызовов.Одним из аспектов системы является возможность воспроизведения записанных коротких сообщений голосовой почты непосредственно с помощью кнопки «Воспроизвести» рядом с деталями сообщения.

Я получаю доступ к звуковым файлам как таковым;

$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 для получения идентификаторассылка на указанный файл перед его воспроизведением;

function PlaySound(soundobj) {
  var thissound=document.getElementById(soundobj);
  thissound.Play();
}

Файлы доступны вне webroot и передаются в html по следующему php-коду:

$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 за раз, но я бы очень хотел, чтобы ссылки на звуковые клипы были доступны и загружались только при выборе для воспроизведения.

Любые идеи будут оценены по достоинству..

1 Ответ

0 голосов
/ 29 июня 2011

Самый простой вариант, который я могу придумать, это не встраивать звуковой файл в HTML. Насколько я знаю, у элемента embed старой школы нет опций, чтобы отключить предварительную загрузку звуковых файлов, для этой функции вы должны заглянуть в HTML5 audio (который, конечно, не работает в старых IE). *

Таким образом, вы просто не помещаете элемент embed в свой HTML-код, а когда вы нажимаете кнопку Play, вы вставляете элемент embed из Javascript. Данные, необходимые для создания элемента embed (например, URL), можно сохранить в атрибуте data- или, в вашем случае, просто записать в список параметров встроенного обработчика событий.

Если вам нужно позаботиться о пользователях с отключенным Javascript, вы все равно можете включить элемент embed в тег noscript (надеюсь, он не начнет предварительную загрузку).

Для этого метода вам нужны только некоторые основные функции, такие как document.createElement() и insertBefore().

...