【发布时间】:2012-12-13 16:03:40
【问题描述】:
我正在使用 Android 的 MediaPlayer 播放使用 DownloadManager 同时从 Internet 下载的 MP3 文件。我知道MediaPlayer 可以直接流式传输,但我不想使用它:
通过下载文件并同时从文件流式传输,您获得的明显优势是,通过这种方式,文件将被存储并在之后在本地可用。
- 这在原则上有效 -
MediaPlayer开始播放文件,即使它没有完全下载。 (顺便说一句,我的问题不是我不能让MediaPlayer玩。) - 问题是当
MediaPlayer到达刚开始播放时下载状态的位置时,它停止并调用onCompletion。 (澄清:假设我开始播放时文件已下载 12%。当播放器到达 12% 的位置时,它会停止。) - 快速旁注:当通过
DownloadManager将某些内容附加到 MP3 文件时,不会调用OnBufferingUpdateListener.onBufferingUpdate(...)。
所以问题是:如何同时将音频文件下载到文件系统并播放? (Android 4+ 就足够了,如果这有区别的话。)
【问题讨论】:
-
你的流媒体怎么样?通过实现一个简单的本地主机服务器,它从下载文件中读取数据并将其提供给已设置为从本地主机流式传输的 MediaPlayer?在这种情况下,你不能让你的服务器返回一个匹配或超过文件全长的 Content-Length 吗?
-
好吧,我只是将 MediaPlayer 指向当前的文件并将其模式设置为 STREAM_BLAH(无论它实际上被称为什么)。所以我目前没有服务器。
-
嗨 Hinton,我必须按照您的要求做同样的事情,您能否发布一个答案(详细说明)您是如何做到的,以便我可以实施它。
-
我现在很忙,但是如果您在阅读本文后仍然想要它,我会在几天内尝试回答。问题:我最后实现的东西很丑。我尝试了 Oren 的方法(这显然是最好的、正确的解决方案),但这对我来说并不太重要,所以我决定默认从 URL 流式传输,让用户告诉我他们是否想下载。在后一种情况下,我会在下载时从 URL 流式传输(是的:浪费带宽),下载完成后,当用户暂停时,我会从流式传输切换到下载的文件。
-
继续:这非常有效。问题是浪费的带宽。如果您是为不太专心且不了解 android 编程的客户执行此操作,他们将永远不会注意到。它至少作为一个临时解决方案起作用——客户告诉你“我想要这个功能”——那么显然最好快速实施任何事情并在你有时间的时候尝试修复它(=“从不”,如果你是一个愤世嫉俗的人人)。
标签: android audio download streaming media-player