Yaq*_*mad 19 audio android shoutcast audio-streaming android-mediaplayer
编辑:
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)
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)
Run Code Online (Sandbox Code Playgroud)
问题是不直接支持内容类型"audio/aacp"流式传输.一些解码库可用于播放"aacp",请参阅下面的解决方案:
[T]他的项目http://code.google.com/p/aacplayer-android/是根据GPL许可的,因此您可以在其上创建商业应用程序,但是您需要填写GPL - 主要是它意味着要发布你的代码也是如此.如果您使用第二个项目 http://code.google.com/p/aacdecoder-android/,则无需发布代码(该库是根据LGPL许可的).
这StreamingMediaPlayer使用双缓冲技术来解决 Android 1.2 之前版本中的限制。Android 操作系统的所有生产版本都包含支持流媒体的 MediaPlayer(1)。我建议这样做,而不是使用这种双缓冲技术来解决这个问题。
Android OS 2.2 使用 FrightCast 播放器替换了旧的媒体播放器代码,在这种情况下,FrightCast 播放器的行为可能有所不同。
堆栈跟踪中的行号不会映射到您链接到的文件,因此我假设您实际使用的版本不同。我猜这NullPointerException正在被报告MediaPlayer,但无论是FileInputStream还是返回FileDescriptor都不能null。
(1) 在版本 2.2 之前,媒体播放器无法识别响应中带有“ICY/1.1”版本标头的 ShoutCast 流。通过创建一个代理并将其替换为“HTTP/1.1”,您可以解决这个问题。有关示例,请参阅此处的 StreamProxy 类。
| 归档时间: |
|
| 查看次数: |
19656 次 |
| 最近记录: |