编辑:
Android 2.2 MediaPlayer可以正常使用一个SHOUTcast URL,但不能与另一个一起使用
我需要播放来自外部URL(shoutcast流)的音频文件.目前,音频文件会逐步下载并在我们在手机本地临时存储中获得足够的音频时立即播放.我正在使用StreamingMediaPlayer类.
检查这段代码:
private MediaPlayer createMediaPlayer(File mediaFile)
throws IOException {
MediaPlayer mPlayer = new MediaPlayer();
//example of mediaFile =/data/data/package/cache/playingMedia0.dat
FileInputStream fis = new FileInputStream(mediaFile);
mPlayer.setDataSource(fis.getFD());
mPlayer.prepare();
return mPlayer;
}
Run Code Online (Sandbox Code Playgroud)
当前状态:
1-从Android 1.6到2.1工作正常,但在Android 2.2等更高版本中没有.
2-"mPlayer.setDataSource(fis.getFD())"是抛出错误的行.
3-错误是"无法创建媒体播放器"
尝试其他方案:
我尝试了下面的替代解决方案但到目前为止没有任
Android 2.2 MediaPlayer可以正常使用一个SHOUTcast URL,但不能与另一个一起使用
我在找什么?
我的目标是拥有可以在Android 2.1及更高版本上运行的代码.
这个问题也在这里讨论:
在2.2中流式传输shoutcast流中断的 2个android代码
3-本期网站上的很多问题也讨论了这个问题,但我发现答案没有.
4- markmail.org
LogCat跟踪:
Unable to to create media player
Error copying buffered conent.
java.lang.NullPointerException
com.ms.iradio.StreamingMediaPlayer.startMediaPlayer(StreamingMediaPlayer.java:251)
com.ms.iradio.StreamingMediaPlayer.access$2(StreamingMediaPlayer.java:221)
com.ms.iradio.StreamingMediaPlayer$2.run(StreamingMediaPlayer.java:204)
android.os.Handler.handleCallback(Handler.java:587)
android.os.Handler.dispatchMessage(Handler.java:92)
android.os.Looper.loop(Looper.java:123)
android.app.ActivityThread.main(ActivityThread.java:3683)
java.lang.reflect.Method.invokeNative(Native Method) …Run Code Online (Sandbox Code Playgroud) 我最近遇到了使用Android 传输AAC +无线电流的一些问题MediaPlayer.关于文档,应该支持在Android 4.1中流式传输AAC +.(测试设备是带有Android 4.2.2的Nexus 2)
我发现了一些相关的问题(请点击这里,这里或这里),但它们主要与较旧的Android版本有关或在4.1版本发布之前的日期.我找到了AACPlayerAndroid图书馆,但你必须购买许可证..
如果我尝试流式传输AACPlus流,则MediaPlayer会抛出MediaPlayerError (1,-2147483648),这被定义为"不支持的媒体格式".但是,如果我在模拟器中启动相同的AAC + Stream,它工作正常!
到目前为止我尝试了什么:
在模拟器中尝试相同的代码工作?!?(为什么..也许在本地机器上支持编解码器?)
使用4.1或4.2测试另外两个设备也会失败
设置AAC +流与手动标头和使用setDataSource(String path),这不起作用(更改http标头也失败)
设置一个新的SimpleMediaPlayer项目 - >也失败了
试图检查网络流量,如果Android设备被重定向到错误的网址.实际上我Charles使用a 连接设备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 …Run Code Online (Sandbox Code Playgroud)