小编cpw*_*cpw的帖子

iOS上的Safari中的HTML 5/QuickTime音频缓存

我不顾一切地试图找到一个必须在iOS-Safari(例如iPad,iPad2和iPhone 4)上运行的Web应用程序的解决方案:

这是我前段时间写的一个网络应用程序,它允许用户搜索和收听短音乐样本(MP3,全部从~100 kB到~1.5 MB).音频播放器是基于Flash的,因此它目前无法在iOS设备上运行,我将不得不在HTML 5或"直接"QuickTime对象中实现替代方案.

我的HTML 5和QuickTime替代iOS设备到目前为止工作正常,但有一个主要问题我无法找到解决方案:

与Flash不同,我的iPad 2上的大多数支持HTML 5的浏览器在加载和播放后都不会将audioiofiles存储在browsercache中 - 无论是HTML 5音频标签还是QuickTime-Object.每次我从服务器加载一个音频文件进行播放时(使用JavaScript命令,所以不用更改或重新加载整个页面),它会再次完全下载.

如果用户收听样本A然后收听样本B,Safari忘记播放样本A并再次下载整个MP3,如果我想再次收听它.在具有可能窄带宽的移动设备上,这种行为是不可能的.

有没有办法在Safari的缓存中存储由HTML 5或QuickTime打开的下载的音频文件,因此它记得已经下载了它们 - 就像它缓存了常见的"网络文件",如HTML,CSS或JPEG图像,或者像Flash一样将这些对象存储在它的本地缓存?

我的第一次尝试是尝试将应用程序缓存与清单文件一起使用 - 虽然这不是我的应用程序的预期目的...我没有一个我希望缓存或"可离线使用"的静态文件集 - 我只想缓存用户已播放的MP3.

应该可以使用"动态清单":一个由Apache PHP模块解析并列出迄今为止从PHP会话中播放的文件 - 如下所示:

session_start();

header("Content-Type: text/cache-manifest, charset=UTF-8");
echo "CACHE MANIFEST\n";
foreach($_SESSION['playedSongs'] as $song)
{
        echo $song."\n";
}
Run Code Online (Sandbox Code Playgroud)

因此,无论何时加载/播放歌曲,我都可以使用AJAX访问PHP会话,插入播放文件的文件名并通过调用window.applicationCache.update()或.swapCache()手动更新清单.

这有两个问题:

首先:它不起作用.我甚至没有尝试使用动态清单:

<!DOCTYPE html>
<html manifest="cache.manifest">
    <head>
        <title>Test</title>
        <script type="text/javascript">

        function playStuff(id)
        {
            if(id == 1)
            {
                window.document.getElementById("audio").innerHTML = '<audio controls preload="automatic" autobuffer><source src="song01.mp3" type="audio/mp3" /></audio>';
            }

            else if(id == 2)
            {
                window.document.getElementById("audio").innerHTML = '<audio controls preload="automatic" …
Run Code Online (Sandbox Code Playgroud)

iphone safari audio caching ios

15
推荐指数
1
解决办法
4298
查看次数

标签 统计

audio ×1

caching ×1

ios ×1

iphone ×1

safari ×1