【发布时间】:2019-05-20 22:53:09
【问题描述】:
我正在构建一个广播流媒体应用。当我有良好的互联网连接时,一切都很好,即使在多任务处理时也是如此。问题在于没有或没有互联网连接不良。
点击播放按钮的那一刻,应用程序会冻结,只有在音频流开始时才会恢复。对于慢速连接,这可能需要几秒钟,挂起应用程序。如果没有互联网,应用程序最终会在一段时间后崩溃。
public class SoundService extends Service {
MediaPlayer mp;
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
mp = new MediaPlayer();
try {
mp.setDataSource("stream_url");
} catch (IllegalArgumentException e) {
e.printStackTrace();
Log.v(TAG, "Error 1");
onDestroy();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.v(TAG, "Error 2");
onDestroy();
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "Error 3");
onDestroy();
}
try {
mp.prepare();
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.v(TAG, "Error 4");
onDestroy();
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "Error 5");
onDestroy();
}
}
public int onStartCommand(Intent intent, int flags, int startId) {
mp.start();
return Service.START_NOT_STICKY;
}
public void onDestroy() {
mp.stop();
mp.release();
stopSelf();
super.onDestroy();
}
}
这就是我开始直播的方式(播放按钮):
startService(new Intent(MainActivity.this, SoundService.class));
在没有连接的情况下,应用程序最终会收到错误号 5,但这仅在崩溃时发生,因此停止播放器为时已晚。在此之前我没有得到任何“捕获”。
作为一种临时解决方法,我会在开始直播之前检查互联网连接。这样我可以防止崩溃,但我仍然遇到应用挂在慢速连接上的问题。
有什么想法吗?谢谢!
【问题讨论】:
-
不是一个完美的解决方案,但你可以尝试使用 setOnBufferingUpdateListener
-
那么 prepareAsync() stackoverflow.com/questions/23309857/…
标签: android-studio android-mediaplayer audio-streaming