我最近遇到了一些使用 Android流式传输 AAC+MediaPlayer
无线电流的问题。关于文档,Android 4.1 中应该支持流式传输 AAC+。(测试设备是带有 Android 4.2.2 的 Nexus 2)
我发现了一些相关问题(查看此处、此处或此处),但它们主要与较旧的 Android 版本或 4.1 版本之前的日期有关。我找到了AACPlayerAndroid库,但你必须在那里购买许可证。
如果我尝试流式传输 AACPlus 流,MediaPlayer 会抛出MediaPlayerError (1,-2147483648)
,它被定义为“不支持的媒体格式”。但是,如果我在模拟器中启动相同的 AAC+ 流,它工作正常!
到目前为止我尝试了什么:
在模拟器中尝试相同的代码有效?!?(为什么......也许本地机器支持编解码器?)
用 4.1 或 4.2 测试另外两个设备也失败了
使用手动标头和 设置 AAC+ 流
setDataSource(String path)
,这不起作用(更改 http 标头也失败)设置一个新的 SimpleMediaPlayer 项目-> 也失败了
尝试检查网络流量,如果 android 设备被重定向到错误的 url。实际上,我
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+ 流,他成功地使用 Android 的 MediaPlayer 类进行流式传输?(只是检查一下,如果我的播放器集成有问题)
如果不支持 ACC+,您是否知道一个好的库或示例项目可以查看,他们是如何解决问题的?
谢谢或任何建议或意见!
我测试的其他 AAC+ 流:http: //jam-aacp.rautemusik.fm
编辑 到目前为止,我最终得到:这是不可能的。AACP-Decoder Library 是一个很好的解决方案,但它还不稳定。希望安卓能尽快支持。如果您不同意,请发表评论!