如何将缓存破坏器 URL 添加到我的音频?
How can I add a cache buster URL to my audio?
我需要在我的 HTML5 音频播放器中向流式传输 URL 添加缓存破坏器扩展。 URL 应从:“192.168.2.50:8000/zr.mp3”更改为:“192.168.2.50:8000/zr.mp3?cb(random number)”,以便浏览器将流视为新流并且不会从缓存中播放。
HTML5 播放器本身由我的 CMS 在登录时呈现,并使用简单的 HTML5 音频标签。我在这里找到了一些脚本,但我不知道如何将它们添加到我的音频播放器的正确 "grammer"。
如果那行不通,有没有办法让 .htaccess 重写 URL?
这是包含 Drupal 网站和音频播放器的 iFrame:
<html>
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta name=viewport content="width=device-width, initial-scale=1">
<style type="text/css">
html, body {
background: #333333;
height: 100%;
margin: 0px;
padding: 0px;
border: 0px;
}
iframe {
width: 100%;
height: 92%;
margin: 0px;
padding: 0px;
border: none;
display: block;
}
</style>
<body>
<?php
print('<iframe id="drupal_site" src="http://test.zoootradio.com" height="92%" width="100%" frameborder="0"></iframe>');
header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1.
header("Pragma: no-cache"); // HTTP 1.0.
header("Expires: 0"); // Proxies.
print('<audio id="player" controls>');
print('<source src="http://192.168.2.50:8000/zr.mp3" type="audio/mpeg">');
print('</audio>');
?>
</body>
</html>
如您所见,我尝试在 iFrame 的 header 和 iFrame 的播放器部分中不添加缓存指令,但它们并不总是适用于所有浏览器。
这是我发现的两个脚本,它们将向流式传输添加缓存清除扩展 URL。
1.
function callback() {
var url = "http://192.168.2.50:8000/zr.mp3?cb=" + new Date().getTime();
var audio = new Audio(url);
audio.load();
audio.play();
}
2.
var audioPlayer = $('<audio src="/' + mp3FileName + '?cb=' + Math.floor(Math.random() * 1000000) + '" type="audio/mpeg" controls></audio>');
有没有办法让它工作?
干杯,
保罗
您使用 PHP 所以让服务器端为您做这件事
print('<source src="http://192.168.2.50:8000/zr.mp3" type="audio/mpeg">');
应该变成
print('<source src="http://192.168.2.50:8000/zr.mp3?'.base64_encode(time().microtime()).'" type="audio/mpeg">');
所以这样做是使用 time()
and microtime()
concatenated and then base64_encode()
生成的字符串,这是因为 base64 是 URL 安全的,并且删除了任何 none URL 安全字符而不将 URL 编码成 URL GET 查询字符串。
虽然这不是唯一的方法,但这是我绕过浏览器缓存的简单方法
我需要在我的 HTML5 音频播放器中向流式传输 URL 添加缓存破坏器扩展。 URL 应从:“192.168.2.50:8000/zr.mp3”更改为:“192.168.2.50:8000/zr.mp3?cb(random number)”,以便浏览器将流视为新流并且不会从缓存中播放。
HTML5 播放器本身由我的 CMS 在登录时呈现,并使用简单的 HTML5 音频标签。我在这里找到了一些脚本,但我不知道如何将它们添加到我的音频播放器的正确 "grammer"。
如果那行不通,有没有办法让 .htaccess 重写 URL?
这是包含 Drupal 网站和音频播放器的 iFrame:
<html>
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta name=viewport content="width=device-width, initial-scale=1">
<style type="text/css">
html, body {
background: #333333;
height: 100%;
margin: 0px;
padding: 0px;
border: 0px;
}
iframe {
width: 100%;
height: 92%;
margin: 0px;
padding: 0px;
border: none;
display: block;
}
</style>
<body>
<?php
print('<iframe id="drupal_site" src="http://test.zoootradio.com" height="92%" width="100%" frameborder="0"></iframe>');
header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1.
header("Pragma: no-cache"); // HTTP 1.0.
header("Expires: 0"); // Proxies.
print('<audio id="player" controls>');
print('<source src="http://192.168.2.50:8000/zr.mp3" type="audio/mpeg">');
print('</audio>');
?>
</body>
</html>
如您所见,我尝试在 iFrame 的 header 和 iFrame 的播放器部分中不添加缓存指令,但它们并不总是适用于所有浏览器。
这是我发现的两个脚本,它们将向流式传输添加缓存清除扩展 URL。
1.
function callback() {
var url = "http://192.168.2.50:8000/zr.mp3?cb=" + new Date().getTime();
var audio = new Audio(url);
audio.load();
audio.play();
}
2.
var audioPlayer = $('<audio src="/' + mp3FileName + '?cb=' + Math.floor(Math.random() * 1000000) + '" type="audio/mpeg" controls></audio>');
有没有办法让它工作?
干杯, 保罗
您使用 PHP 所以让服务器端为您做这件事
print('<source src="http://192.168.2.50:8000/zr.mp3" type="audio/mpeg">');
应该变成
print('<source src="http://192.168.2.50:8000/zr.mp3?'.base64_encode(time().microtime()).'" type="audio/mpeg">');
所以这样做是使用 time()
and microtime()
concatenated and then base64_encode()
生成的字符串,这是因为 base64 是 URL 安全的,并且删除了任何 none URL 安全字符而不将 URL 编码成 URL GET 查询字符串。
虽然这不是唯一的方法,但这是我绕过浏览器缓存的简单方法