流式传输音频时MediaPlayer缓冲时间问题

Sta*_*wer 10 android android-mediaplayer

我正在使用MediaPlayer通过HTTP传输无线电.在Lollipop上,我的流程需要大约一分钟才能启动,这是不可接受的.Kitkat需要大约20秒,这已经很痛,但现在变得无法使用.

这个组件与缓冲有一个众所周知的问题:缓冲区的字节数被编码并且不能被改变.

我的代码非常标准

player.reset();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(streamUrl);
player.prepareAsync();
Run Code Online (Sandbox Code Playgroud)

我准备好了

player.start();
Run Code Online (Sandbox Code Playgroud)

我听说过替代品,GStreamer但我无法在Windows上运行.

我想知道是否有人有一个有效的解决方案来通过HTTP流式传输无线电启动延迟.

编辑

我测试了ExoPlayer但是我得到的较低开始时间是15秒.玩家停留在"准备"状态(不缓冲,到目前为止,我看到了).

编辑

流的格式是AAC

编辑

我测试了https://code.google.com/p/aacdecoder-android/,但此库唯一的问题是缺少对流暂停的支持.我的应用程序要求支持在线流的暂停.

Kai*_*Kai 8

如果您的用例与GPL/LGPL许可证兼容,那么VLC应该是您所需要的.VLC能够在3G网络上从您的URL流式传输,延迟时间仅为1秒.

步骤1: 下载VLC源代码并按照说明进行编译

第2步: 最重要的类是org.videolan.vlc.audio.AudioServiceController,从中调用org.videolan.vlc.gui.MRLPanelFragement.processUri() --> org.videolan.vlc.util.Util.openStream(Context, String) --> AudioServiceController.load(String, boolean).除了AudioServiceController及其支持类之外,您可以删除所有不必要的代码以减小大小