Android:AAC+ radio 流式传输不适用于 MediaPlayer(Android 4.2.2/Shoucast 链接)

标签 android streaming android-mediaplayer

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

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

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

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

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

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

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

  • 设置一个新的 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+ 流,即使它们应该受到支持?

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

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

谢谢或任何建议或建议!

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

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

最佳答案

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

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

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

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

但它还需要一个 AAC Patent License * 如果你想让应用程序公开(私有(private)使用我认为它不关心......)它也需要一个 BASS License除非您是非商业实体。

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

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

关于Android:AAC+ radio 流式传输不适用于 MediaPlayer(Android 4.2.2/Shoucast 链接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225076/

相关文章:

android - 实现我自己的 OnTouchListener

html - 在现场流式传输音频时出现问题

java - android获取当前videoview的截图

android - Android 中的音频播放器

android - mediarecorder如何暂停和恢复录制视频

带有 MVP fragment 的 Android Smack

Android Google Sign In 在用户登录时闪烁一个小的空白框

c# - 如何多播 DirectShow 捕获的流?

c# - IAsyncEnumerable 用于永无止境的流

安卓 Gingerbread : NFC support - Receive Only?