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

4
要链接到SHOUTcast/HTTP互联网电台流,传统上需要链接到播放列表文件,例如M3U或PLS。然后,浏览器会启动已注册处理播放列表的音频播放器。这在任何PC、Palm、Blackberry和iPhone上都很好用。
这种方法在Android上不起作用,除非安装额外的软件。当然,“Just Playlists”或“StreamFurious”可以很好地处理它,但我假设有一种方法可以调用默认安装在Android上的音频或视频播放器。
默认情况下,没有音频播放器能够处理M3U或PLS。播放器似乎打开了它,但显示“不支持的媒体类型”。
更令人恼火的是,浏览器能够通过打开指向MP3文件的链接来流式传输MP3音频。我尝试直接链接到由SHOUTcast托管的MP3流,这应该得到相同的结果,但SHOUTcast检测到用户代理字符串中的“Mozilla”,而不是发送流,它发送电台的信息页面。
我应该如何在Android上从普通移动站点链接到SHOUTcast流,而不使用额外的应用程序?

1
在Android安装中,没有单一的“音频或视频播放器通常默认安装”。来自Android开源项目的播放器不支持播放列表,至少在Android 2.3版本中如此。根据预览SDK,在Android 3.0中,“应用程序现在可以将M3U播放列表URL传递给媒体框架以开始HTTP Live流会话。”这意味着Android开源项目媒体播放器应用程序可能支持播放列表,尽管我们还需要几周时间才能确定。 - CommonsWare
感谢CommonsWare提供的见解。当我在手机上打开“音乐”应用时,在我所见过的所有Android手机上都会打开一个音频播放器,而且每个手机上的外观都相同。这就是你所指的音频播放器吗?它有特定的名称吗?当我打开“互联网”浏览器时呢?它有名称吗?我知道并非每个Android设备都有这些功能,但我仍然想针对最常见的设备进行开发。当我在浏览器中打开MP3文件时,它开始流式传输。这是否是浏览器的一个功能,还是其他什么原因造成的? - Brad
1
Android 开源项目(AOSP)包括许多标准应用程序,包括音乐播放器。其源代码在此处:http://android.git.kernel.org/?p=platform/packages/apps/Music.git;a=summary。当浏览器打开 MP3 或其他内容时,它不会按名称运行程序,而是要求 Android 的 Intent 框架来处理它。它有效地告诉操作系统“将这些数据交给一个可以处理 MIME 类型 'audio/mpeg' 的程序”。请参见 http://developer.android.com/guide/topics/intents/intents-filters.html,特别是“Data”部分。 - Reuben Scratton
4个回答

3

如评论中所述,您所问的是不可能的,至少在3.0推出之前,即使在那时功能也需要很长时间才能在大多数设备上实现。"无需额外应用程序"的限制太过严格。下面是一些违反此限制的替代方案,我建议您考虑:

  • 要求用户安装应用程序
    是的,这不是您想要的,但这是最容易做到的事情。Just Playlists(正如您已经发现的那样)是一个值得推荐的好选择。

  • 使用Flash
    并非所有人都有Flash,但对于那些拥有Flash的人来说,您可以嵌入一个Flash小部件来播放播放列表。我在快速谷歌搜索中找到了一个听起来会工作的。SHOUTcast有自己的Flash播放器吗?

  • 等待
    基本上,由于Android中没有这个功能,你唯一的其他选择就是等待。


谢谢fredley,我担心这些是我唯一的选择,而且我已经考虑了所有三个选项。事实上,我已经开始构建一个Flash播放器。令人沮丧的是,5年以上的设备可以直接支持简单的M3U,而Android中的默认播放器却不行。然而,我还没有放弃。我目前正在尝试强制SHOUTcast服务器发送音频/ mpeg,而不管用户代理字符串是什么。如果我能让它工作,那就有希望了。也许... - Brad

1
你的 M3U 文件包含哪种类型的流?
你可以跳过 M3U 直接将数据源设置为 RTSP 流。
mediaPlayer.setDataSource("rtsp://xxx/stream.stream");

运行完美

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


SHOUTcast/HTTP,我是在网页上进行操作,而不是在某个应用程序中。 - Brad

1

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

事实证明,这是可能的。对于Android设备,与其他平台不同的是,您只需直接链接到流,而不是像其他平台那样链接到播放列表。(这似乎就是Reuben Scratton在他的评论中所说的。我希望我早点看到他的评论!)

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

请注意,如果您想让此功能正常工作,则需要在SHOUTcast上进行相当多的黑客攻击,因为Android需要有效的HTTP资源,而SHOUTcast并未提供。另请注意,分块编码似乎在Android 2.2及更早版本上无法正常工作。

顺便说一下,如果您不想为此编写自己的代码,我已经在开发的流媒体服务器AudioPump中实现了流媒体到Android的功能


-1

终于找到了解决方案!使用 Opera 浏览器,它会提示保存 m3u 文件。然后启动 justplaylists。在我的 HTC Incredible 2 上完美运行。


3
不需要使用Opera,它们都会保存M3U。 - Brad

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