【发布时间】:2013-03-05 13:31:15
【问题描述】:
我最近遇到了一些使用 Android MediaPlayer流式传输 AAC+ 无线电流的问题。 Regarding to the documentation,Android 4.1 应该支持流式传输 AAC+。 (测试设备是 Nexus 2 和 Android 4.2.2)
我发现了一些相关问题(检查here、here 或here),但它们主要与较旧的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