EDIT:
Android 2.2 MediaPlayer is working fine with one SHOUTcast URL but not with the other one
我需要播放来自外部URL(shoutcast流)的音频文件 . 目前,音频文件会逐步下载并在我们在手机本地临时存储中获得足够的音频时立即播放 . 我正在使用StreamingMediaPlayer class .
检查这段代码:
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;
}
Current status:
1-从Android 1.6到2.1工作正常,但在Android 2.2等更高版本中没有 .
2-“mPlayer.setDataSource(fis.getFD())”是抛出错误的行 .
3-错误是“无法创建媒体播放器”
Other Solution tried:
我尝试了下面的替代解决方案但到目前为止没有任
Android 2.2 MediaPlayer is working fine with one SHOUTcast URL but not with the other one
What i am looking for?
我的目标是拥有可以在Android 2.1及更高版本上运行的代码 .
This issue is also discussed here:
1- Inconsistent 2.2 Media Player Behavior
2- android code for streaming shoutcast stream breaks in 2.2
3-本期网站上的很多问题也讨论了这个问题,但我发现答案没有 .
4- markmail.org
LogCat trace:
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)
java.lang.reflect.Method.invoke(Method.java:507)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
dalvik.system.NativeStart.main(Native Method)
3 回答
StreamingMediaPlayer
类正在使用双缓冲技术来解决Android 1.2之前版本中的限制 . Android OS的所有 生产环境 版本都包含支持流媒体的MediaPlayer(1) . 我建议这样做,而不是使用这种双缓冲技术来解决问题 .Android OS 2.2用FrightCast播放器替换旧的媒体播放器代码,在这种情况下可能采取不同的行为 .
堆栈跟踪中的行号与're actually using. I'猜测
NullPointerException
报告的NullPointerException
不同,但FileInputStream
和返回的FileDescriptor
都不能null
.(1)在2.2版之前,媒体播放器无法识别响应中带有"ICY/1.1"版本标头的ShoutCast流 . 通过创建用"HTTP/1.1"替换它的代理,您可以解决这个问题 . 有关示例,请参阅StreamProxy class here .
问题是不直接支持内容类型“audio / aacp”流式传输 . 一些解码库可用于播放“aacp”,请参阅下面的解决方案:
Freeware Advanced Audio (AAC) Decoder for Android
How to use this library?
Consider legal issues while using it.
我正在使用此代码并运行2.2到更高版本的流媒体下载 .