Android:AAC +无线电流不支持MediaPlayer(Android 4.2.2 / Shoucast链接)

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

我发现了一些相关的问题(请点击此处 , 此处或此处 ),但它们主要与较旧的Android版本相关或在4.1版本发布之前发布。 我find了AACPlayerAndroid图书馆,但你必须购买许可证..

如果我尝试流式传输AACPlus流,则MediaPlayer会抛出MediaPlayerError (1,-2147483648) ,其定义为“不支持的媒体格式”。 但是,如果我在模拟器中启动相同的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 headers = new HashMap(); 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 + Stream,他成功地使用Android的MediaPlayer类进行流式传输? (只是为了检查,如果我的播放器集成有什么东西)

如果不支持ACC +,您是否知道一个好的图书馆或示例项目,他们如何解决这个问题?

谢谢或任何建议或意见!

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

编辑到目前为止,我最终得出结论 :这是不可能的。 AACP解码器库是一个很好的解决方案,但它还不稳定。 希望Android能尽快支持这一点。 如果你不同意, 请评论

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

我玩MediaPlayer很多都没有成功。 我甚至在应用程序内测试了用于在旧版Android上流式传输MP3流的应用程序

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

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

但是如果你想公开申请(私人使用,我认为它并不关心……),它还需要AAC专利许可 *。除非你是非商业实体,否则它还需要BASS许可 。

*)Android应用程序被视为消费者产品而不是消费者PC软件 …只是为了避免我们为我们的应用程序所犯的错误…

[UPDATE]
为什么需要专利费?
一旦产品(在这种情况下是App)带来的是自己的解码器(或编码器),BASS和aacdecoder-android带来他们自己的解码器代码,他们必须支付费用,他们需要有AAC许可证。 只有当可以使用主机系统上可用的解码器(由主机系统的开发者许可/支付 – 在这种情况下为Google)时,它才是“免费的”。 但似乎目前无法访问/使用设备编解码器……

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

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

我也研究了这个,我发现如果你包含你自己的解码器 ,有必要支付许可费:

Vialicensing(AAC)回复:

“如果您将利用Android中的本机AAC支持,以便您的应用程序不包含AAC编码器或解码器,那么您就没有必要/义务获得许可 – 您的产品不会侵犯。”

这意味着你可以在没有版税的情况下玩AAC的唯一方法是本机Android播放器支持AAC及其内置解码器。 根据事物的外观,4上没有对此的支持。我已经尝试向播放器提供AAC流,它只是永久缓冲。