14

我最近遇到了一些使用 Android流式传输 AAC+MediaPlayer无线电流的问题。关于文档,Android 4.1 中应该支持流式传输 AAC+。(测试设备是带有 Android 4.2.2 的 Nexus 2)

我发现了一些相关问题(查看此处此处此处),但它们主要与较旧的 Android 版本或 4.1 版本之前的日期有关。我找到了AACPlayerAndroid库,但你必须在那里购买许可证。

如果我尝试流式传输 AACPlus 流,MediaPlayer 会抛出MediaPlayerError (1,-2147483648),它被定义为“不支持的媒体格式”。但是,如果我在模拟器中启动相同的 AAC+ 流,它工作正常!

到目前为止我尝试了什么:

  • 在模拟器中尝试相同的代码有效?!?(为什么......也许本地机器支持编解码器?)

  • 用 4.1 或 4.2 测试另外两个设备也失败了

  • 使用手动标头和 设置 AAC+ 流setDataSource(String path),这不起作用(更改 http 标头也失败)

  • 设置一个新的 SimpleMediaPlayer 项目-> 也失败了

  • 尝试检查网络流量,如果 android 设备被重定向到错误的 url。实际上,我Charles使用连接了设备Proxy,但只能监控 Android 浏览器。我仍然认为重定向是正确的!

这是我的 Streaming.class 的 setDataSource 的实现

public AmplifyMediaPlayer(PlayerStationObject playerStationObject, Context context) {
     super();
     this.setAudioStreamType(AudioManager.STREAM_MUSIC);
     this.mCurrentStationObject = playerStationObject;
     try {
        //AAC+ TestStream #1: NOT WORKING
        //Uri uri = Uri.parse("http://up-gc2.webnow.com.br/alpha.aac");

        //AAC+ TestStream #2: NOT WORKING   
        //Audio codec: 64 kbit/s 44.1 kHz AAC+, 128 kbit/s 44.1 kHz MP3
        //Uri uri = Uri.parse("http://relay.publicdomainproject.org:80/jazz_swing.aac   ");

        //Setting HTTP header for fixing some issues with normal setDataSource Header from Android
        //User-Agent "iTunes" was set to force re-direct to shoutcast streaming url     
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("User-Agent", "iTunes");

        setDataSource(context, uri, headers);

        //AAC Codec works fine...
        //setDataSource("http://fri.net.pl:8000/fri");

        prepareAsync();

        //...

所以实际上我有以下问题:

为什么我无法在 Android 4.1 及更高版本上播放 ACC+ Stream,即使它们应该受支持?

有没有人有一个 ACC+ 流,他成功地使用 Android 的 MediaPlayer 类进行流式传输?(只是检查一下,如果我的播放器集成有问题)

如果不支持 ACC+,您是否知道一个好的库或示例项目可以查看,他们是如何解决问题的?

谢谢或任何建议或意见!

我测试的其他 AAC+ 流:http: //jam-aacp.rautemusik.fm

编辑 到目前为止,我最终得到:这是不可能的。AACP-Decoder Library 是一个很好的解决方案,但它还不稳定。希望安卓能尽快支持。如果您不同意,请发表评论

4

3 回答 3

3

我的应用程序遇到了同样的问题。

我用 MediaPlayer 玩了很多,但没有成功。我什至在应用程序中使用代理进行了测试,该代理用于在较旧的 android 版本上流式传输 MP3 流

我还测试了aacplayer-android / aacdecoder-android,但在我的测试中它不是很稳定......

由于找不到,我们最终选择了BASS for Android 。

但它也需要AAC 专利许可证* 如果您想公开应用程序(供私人使用,我认为它不关心......)也需要BASS 许可证,除非您是非商业实体。

*) Android 应用程序算作消费产品,而不是消费 PC 软件......只是为了避免我们为应用程序犯下的错误......

[更新]
为什么需要专利费?
一旦产品(在这种情况下是应用程序)带来了自己的解码器(或编码器),就必须支付费用,因为 BASS 和 aacdecoder-android 都带来了自己的解码器代码,他们需要有 AAC 许可证。仅当可以使用主机系统上可用的解码器(由主机系统的开发人员许可/付费 - 在本例中为 Google)时,它是“免费的”。但目前似乎没有办法访问/使用设备编解码器......

于 2013-03-13T13:00:08.007 回答
0

如果您可以使用 USB 连接您的 Nexus 2 并运行adb shell并获得一个终端,您可以使用它stagefright来检查支持的可用编解码器和配置文件。

例如stagefright -landstagefright -p将是两个有用的命令。

于 2013-03-12T00:54:49.053 回答
0

我也对此进行了调查,发现如果您包含自己的解码器,则需要支付许可费:

Vialicensing (AAC) 回复:

“如果您将利用 Android 中的本机 AAC 支持,以便您的应用不包含 AAC 编码器或解码器,那么您就不需要/有义务获得许可——您的产品不会侵权。”</ p>

这意味着您可以在没有版税的情况下播放 AAC 的唯一方法是原生 Android 播放器通过其内置解码器支持 AAC。从外观上看,4 不支持此功能。我尝试为播放器提供 AAC 流,它只是永久缓冲。

于 2016-04-04T11:44:15.913 回答