我正在使用MediaController
和VideoView
来显示我通过HTTP从Amazon S3流式传输的视频。
我想让他们第一次看到视频文件后可以离线访问。流媒体效果很好,我的问题是Android保存视频文件的位置,一旦视频完全被观看后它们实际上是可访问的(因此必须完全下载)。
这两个类的文档都没有提供有关此问题的任何详细信息,如果存储媒体文件, 将存储它们。感觉这对于MediaController
来说是一项伟大的任务,但实际上我找不到任何暗示。
我的解决方案现在是使用DownloadManager
的实例,即在流媒体时并行下载文件,但这感觉非常非常错误!
答案 0 :(得分:2)
Android中的VideoView
使用MediaPlayer
API,在远程媒体的情况下流它并在运行中对其进行解码/渲染。
MediaPlayer
不会在设备的闪存中存储任何内容,而是在内存中使用循环缓冲区,用作预处理缓存。有关此内容的更多信息,请参见NuCacheSource2实施的源代码。
现在,您可以采取的措施是编写一个代理,它将在您的设备或您要保存媒体的其他地方运行。下载远程媒体时,它可以将数据保存到文件系统,同时将数据转发到Android MediaPlayer
。在这种情况下,您需要为MediaPlayer
提供指向代理的网址,而不是远程媒体所在的原始位置。