【问题标题】:Android: AAC+ radio streaming doesn't work with MediaPlayer (Android 4.2.2 / Shoucast links)Android:AAC+ 广播流不适用于 MediaPlayer(Android 4.2.2 / Shoucast 链接)
【发布时间】:2013-03-05 13:31:15
【问题描述】:

我最近遇到了一些使用 Android MediaPlayer流式传输 AAC+ 无线电流的问题。 Regarding to the documentation,Android 4.1 应该支持流式传输 AAC+。 (测试设备是 Nexus 2 和 Android 4.2.2)

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

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

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

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

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

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

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

  • 尝试检查网络流量,如果 android 设备被重定向到错误的 url。实际上,我使用Proxy 将设备与Charles 连接,但只能监控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 是一个很好的解决方案,但它还不稳定。希望安卓能尽快支持。如果您不同意,请评论

【问题讨论】:

  • aacPlus 解码 在 Android 4.1 之前就已经存在了。一些 Android 的编解码器是(或可能是)硬件相关的。如果您的代码在模拟器中运行但不在实际设备上运行,您可能会发现您的设备支持 AAC 的硬件编解码器,但可能不支持您的流,因为它可能具有某些特定特性。我建议在几种不同的设备上进行测试。

标签: android streaming android-mediaplayer


【解决方案1】:

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

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

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

我们最终找到了BASS for Android,因为我们无法找到。

但如果您想让应用程序公开(供私人使用,我认为它不关心...),它还需要AAC Patent License*,除非您是非商业实体,否则它还需要BASS License

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

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

【讨论】:

  • 那么,你最后支付了AAC专利许可吗?价格是多少?
  • 我们转移到了 OGG 流。 AAC 价格可在此处获得:vialicensing.com/licensing/aac-fees.aspx 前 1 至 500,000 个单位的价格为每单位 0.98 美元,对于 500,001 至 1,000,000 个单位的价格为 0.78 美元。这个价格是每年的。所以你必须每年支付这笔费用。
【解决方案2】:

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

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

【讨论】:

  • 我在终端中输入“adb shell”,然后输入“stagefright -l”,但得到“stagefright: not found”。我应该如何进行?
【解决方案3】:

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

Vialicensing (AAC) replied:

“如果您要利用 Android 中的原生 AAC 支持, 您的应用程序不包含 AAC 编码器或解码器,那么您不会 需要/有义务获得许可证——您的产品不会 侵权。”

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2022-06-11
    相关资源
    最近更新 更多