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

时间:2013-03-05 13:31:16

标签: android streaming android-mediaplayer

我最近遇到了一些使用Android MediaPlayer 流式传输AAC + 广播流的问题。 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 + Stream,它工作正常!

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

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

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

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

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

  • 尝试检查网络流量,如果Android设备被重定向到错误的网址。实际上,我使用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 + Stream,他成功使用Android的MediaPlayer类进行流式传输? (只是为了检查,如果我的播放器集成有什么东西)

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

谢谢或任何建议或建议!

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

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

3 个答案:

答案 0 :(得分:3)

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

我在MediaPlayer上玩了很多但没有成功。我甚至在app中使用代理进行了测试,该代理用于在旧版Android上播放MP3 Streams

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

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

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我也调查了这一点,我发现如果你包含你自己的解码器,就必须支付许可费用:

Vialicensing (AAC) replied:

  

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

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