在Android上从流媒体网页启动音频播放器的方法

Posted

技术标签:

【中文标题】在Android上从流媒体网页启动音频播放器的方法【英文标题】:Method for launching audio player on Android from web page for streaming media 【发布时间】:2011-06-26 15:12:33 【问题描述】:

要链接到 SHOUTcast/HTTP 互联网广播流,通常您会链接到播放列表文件,例如 M3U 或 PLS。从那里,浏览器将启动注册来处理播放列表的音频播放器。这适用于任何 PC、Palm、Blackberry 和 iPhone。

此方法在不安装额外软件的情况下android 中工作。当然,Just PlaylistsStreamFurious 可以很好地处理它,但我假设必须有一种方法来调用通常默认安装在 Android 安装上的音频或视频播放器.

默认情况下,没有音频播放器能够处理 M3U 或 PLS。播放器似乎打开了它,但显示“不支持的媒体类型”。

为了让这更烦人,浏览器能够通过 HTTP 流式传输 MP3 音频,只需打开 MP3 文件的链接即可。我尝试直接链接到 SHOUTcast 托管的 MP3 流,结果应该相同,但 SHOUTcast 在用户代理字符串中检测到“Mozilla”,而不是发送流,而是发送信息页面车站。

我应该如何从普通的移动网站链接到 Android 上的 SHOUTcast 流,而不使用额外的应用程序?

【问题讨论】:

没有单一的“通常默认安装在 Android 安装上的音频或视频播放器”。 Android 开源项目中的一个不支持播放列表,至少在 Android 2.3 中是这样。根据预览版 SDK,在 Android 3.0 中,“应用程序现在可以将 M3U 播放列表 URL 传递给媒体框架,以开始 HTTP Live 流会话。”这意味着 Android 开源项目媒体播放器应用可能支持播放列表,尽管我们需要几周时间才能发现。 感谢 CommonsWare 的洞察。当我在我的手机和我见过的任何其他运行 Android 的手机上打开“音乐”时,它会打开一个音频播放器,并且在我见过的每部手机上看起来都是一样的。是你说的那个音频播放器吗?它有特定的名称吗?当我打开“Internet”时,浏览器呢?它有名字吗?我知道这些并非在每个 Android 设备上都可用,但我再次尝试针对最常见的设备。当我在该浏览器中打开 MP3 时,它会开始流式传输。这是网络浏览器的功能还是其他什么? Android 开源项目 (AOSP) 包括许多标准应用程序,包括音乐播放器。它的来源在这里:android.git.kernel.org/?p=platform/packages/apps/…。当浏览器打开 MP3 或其他内容时,它不会按名称运行程序,而是要求 Android 的 Intents 框架来处理它。它有效地告诉操作系统“将此数据提供给可以处理 MIME 类型 'audio/mpeg' 的程序”。请参阅developer.android.com/guide/topics/intents/intents-filters.html,尤其是“数据”部分。 【参考方案1】:

正如 cmets 中所指出的,您所问的问题是不可能的,至少在 3.0 发布之前是不可能的,即便如此,在大多数设备上实现该功能还需要很长时间。 “没有额外的应用程序”的限制太有限了。以下是一些违反此约束的替代方案,我敦促您考虑改为:

要求用户安装应用 是的,这不是您想要的,但这是最简单的事情。 Just Playlists(正如您所发现的那样)是值得推荐的。

使用闪光灯 不是每个人都有 Flash,但对于那些你可以嵌入 Flash 小部件来播放播放列表的人。我只是从一个快速的谷歌上找到了one that sounds like it'll work。 SHOUTcast 有自带的 Flash 播放器吗?

等待 基本上你唯一的选择,因为这个功能在 Android 中还没有。

【讨论】:

谢谢弗莱德利,我担心这些是我唯一的选择,我已经考虑了所有三个。事实上,我正在为它构建一个 Flash 播放器。 5 年以上的设备开箱即可支持简单的 M3U,而 Android 中的默认播放器不支持,这真的很令人沮丧。不过我还没有放弃。我目前正在尝试强制 SHOUTcast 服务器发送音频/mpeg,尽管用户代理字符串是什么。如果我能做到这一点,那就有希望了。也许……【参考方案2】:

你的 M3U 文件包含什么样的流?

例如,您可以跳过 M3U 并将数据源直接设置为 rtsp 流。

mediaPlayer.setDataSource("rtsp://xxx/stream.stream");

完美运行

别忘了在不同的线程中运行它。

【讨论】:

SHOUTcast/HTTP,我在网页上执行此操作,而不是在某些应用程序中。【参考方案3】:

终于找到解决办法了!使用 Opera 网络浏览器,会提示保存 m3u 文件。然后启动 justplaylists。在我的 HTC Incredible 2 上工作就像一个魅力

【讨论】:

不需要Opera,都省了一个M3U。【参考方案4】:

适用于所有 Android 的解决方案! (在 2.1 及更高版本上测试)

事实证明,这可能的。对于 Android,无需像在其他平台上那样链接到播放列表,您只需直接链接到流。 (这似乎是 Reuben Scratton 在他的评论中的意思。我希望我早点看到他的评论!)

浏览器将连接到流,检测Content-Type,然后决定将其传递给默认媒体播放器(如果它可以处理)。然后媒体播放器将缓冲并开始播放。

请注意,如果您想让 SHOUTcast 正常工作,您必须对 SHOUTcast 进行大量修改,因为 Android 需要有效的 HTTP 资源,而 SHOUTcast 不提供该资源。另请注意,分块编码似乎不适用于 Android 2.2 及更早版本。

附带说明,如果您不想为此编写自己的代码,我已经实现了streaming to Android in AudioPump,这是我正在开发的流媒体服务器。

【讨论】:

以上是关于在Android上从流媒体网页启动音频播放器的方法的主要内容,如果未能解决你的问题,请参考以下文章

Android多媒体功能开发——使用MediaPlayer类播放音频

Android多媒体之音频播放

Android多媒体之音频播放

在android中一起播放音频视频

使用 HTML5 播放音频

如何直接在 android 上从扬声器播放声音 instaed Headset?