安卓是否能使用缓存清单离线缓存HTML5视频?

12

我有一个示例,它在Chrome上可以很好地被缓存,并且可以在离线情况下显示视频。

但是,当我在Android 3.2和4.x平板电脑上尝试这个示例时,视频只能在线播放,而离线时无法播放——尽管其他元素(例如HTML文件和背景)可以离线使用。

<!DOCTYPE html>
<html manifest="example.appcache">
    <head>
        <title>Hello Video!</title>
        <style>
        body{ background: url('background.jpg');}
        </style>
    </head>
    <body>
        <video width="855" height="480" controls="">
            <source src="railer.mp4"/>
        </video>
    </body>
</html>

缓存清单 example.appcache 的样式如下:

CACHE MANIFEST

index.html
railer.mp4
background.jpg

NETWORK:
*

有人成功地通过缓存清单(cache-manifest)在Android浏览器中实现了离线视频缓存吗?


3
你解决了你的问题吗?@alarmatwork - Odin
@ alarmatwork,请查看:https://dev59.com/N2ox5IYBdhLWcg3weUCe#42379075 - Raphael Rafatpanah
3个回答

2

我尝试使用Android 4.1.2的默认浏览器和Chrome 27.0缓存视频(mp4格式)和音频(mp3格式)文件,但正如您在帖子中提到的那样,尽管它缓存了这些元素,但在离线模式下无法播放视频和音频。


0

问题在于HTML5离线规范中未指定AppCache的最大大小。 各种 文章 在互联网上 显示了不同的离线存储配额限制。

在StackOverflow上也存在许多关于缓存最大文件大小的问题:

我认为可以肯定的是,最大配额可用性严重取决于浏览器和平台 - 有时甚至取决于可用的空间。

有一个工具 http://demo.agektmr.com/storage/(在这篇文章中找到),可以检查您设备上可用的最大配额。也许当您查看它时,您会发现您想要缓存的视频文件大小对于您的设备来说太大了。

简而言之,提到的来源引导我得出以下答案:(有时)可以将视频存储到有限的文件大小,这取决于浏览器、平台和运行环境。但是不能保证它将被正确缓存(至少如果它不够小)。


在我的情况下,我已经确认视频文件已经被浏览器存储了(而且我的视频文件大小只有1mb到3mb),但是当浏览器离线时它们仍然无法播放。 - rdans
哦,你让浏览器缓存了视频(即保存到存储中),但它无法加载缓存文件?嗯,这听起来更像是浏览器错误而不是应用程序高速缓存功能的限制。 - Briareos386

0

我已经包含了一个基本的示例 (源代码),演示如何在使用应用程序缓存或服务工作者时缓存HTML5视频以供离线使用。

为了将视频存储到离线使用:

  1. 将视频作为数组缓冲区获取
  2. 将数组缓冲区存储在IndexedDb中
  3. 将数组缓冲区转换为Blob
  4. 将Blob分配给视频的源
  5. 当离线时,从IndexedDB中获取视频的源

如果需要,您也可以在在线时从IndexedDB中获取视频的源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接