我面临一个与Android,流媒体和媒体播放器相关的奇怪问题。
实际的应用程序非常复杂,但我已经提出了最简单的测试用例:“Hello,World”活动启动带有硬编码URL的Media Player。这在Android模拟器中工作正常,API级别7(这是真实应用程序的最低值)和API级别17.但是,相同的应用程序在API级别15的硬件设备上失败 - 在prepare()调用期间Media Player失败:
总是失败(阻塞和非阻塞准备)显示“错误(1,-2147483648)”。 Media Player文档没有错误代码-2147483648(0xffffffff)。
该应用具有访问互联网的适当权限(android.permission.INTERNET),并且设备的互联网连接正常(同一个应用可以从互联网上下载文件)。
这不是编解码器问题 - 因为仿真器可以播放相同的流,并且因为任何其他流在硬件设备上以相同的方式失败。
尝试了许多其他没有帮助的事情:
硬件工作正常,因为同一设备可以使用Android内置默认音频播放器应用程序播放其存储中的音频文件。
我不相信(很多)幽灵,但我有点不用其他选择。有人见过这样的事吗?该应用程序在模拟器中工作,但不在硬件上工作?
任何人都可以在硬件设备上试用这个代码(我只有1个Android设备)吗?
public class MainActivity extends Activity {
private MediaPlayer mediaPlayer;
private String listen_url = "http://stream15.top-ix.org:80/radiojukebox-low";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaPlayer = new MediaPlayer();
//mediaPlayer.reset();
try {
mediaPlayer.setDataSource(listen_url);
//mediaPlayer.setDataSource(this, Uri.parse(listen_url));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
// We fail here!
e.printStackTrace();
}
mediaPlayer.start();
}
}
答案 0 :(得分:0)
这通常是因为您正在使用的设备不支持流类型。你试过一个简单的MP3流吗?