Hello everybody,
I’m using the Java media player and trying to make a perfect loop (seamless). However when I go back to this topic Gappless sound loop on Android.. And what to do about it. | by @ViksaaSkool | Medium and change some details to make it match with Ionic I have something like 5 to 10 loop ok then the app crashes.
An idea ?
Error: Media Player Renderer process crash detected code 6
A/chromium: [FATAL:crashpad_client_linux.cc(667)] Render process (30757)'s crash wasn’t handled by all associated webviews, triggering application crash.
/**
* Prepare the media player to be playing
* @param url
* @param loop
*/
private void PerfectLoopMediaPlayer(String url, Boolean loop) {
Log.i(TAG, "url: "+url);
mPath = url;
try {
Log.i(TAG, "===Perfect Loop MediaPlayer===");
// mCurrentPlayer = new MediaPlayer();
mCurrentPlayer.setDataSource(mPath);
mCurrentPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
try {
if(!mCurrentPlayer.isPlaying()) {
mCurrentPlayer.start();
}
} catch (Exception e) {
Log.d("Error", "onPrepared 1: "+e.getMessage());
}
}
});
// Successful invoke of this method in a valid state transfers the object to the Preparing state. Calling this method in an invalid state throws an IllegalStateException.
mCurrentPlayer.prepareAsync();
createNextMediaPlayerPath();
} catch (Exception e) {
Log.d("Error", "PerfectLoopMediaPlayer: "+e.getMessage());
e.printStackTrace();
}
}
/**
* Create the next media player to follow the end of the first
* Android: Interface definition for a callback to be invoked when the media source is ready for playback
*/
private void createNextMediaPlayerPath() {
mNextPlayer = new MediaPlayer();
try {
mNextPlayer.setDataSource(mPath);
mNextPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
try {
mNextPlayer.seekTo(0);
mCurrentPlayer.setNextMediaPlayer(mNextPlayer);
mCurrentPlayer.setOnCompletionListener(onCompletionListener);
} catch (Exception e) {
Log.d("Error", "onPrepared 2: "+e.getMessage());
}
}
});
// Successful invoke of this method in a valid state transfers the object to the Preparing state. Calling this method in an invalid state throws an IllegalStateException.
mNextPlayer.prepareAsync();
} catch (IOException e) {
Log.d("Error", "createNextMediaPlayerPath: "+e.getMessage());
e.printStackTrace();
}
}
/**
* Play the second audio
* Android: Interface definition for a callback to be invoked when playback of a media source has completed
*/
private final MediaPlayer.OnCompletionListener onCompletionListener =
new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
try {
mCurrentPlayer = mNextPlayer;
createNextMediaPlayerPath();
// After release, the object is no longer available.
mediaPlayer.release();
Log.d(TAG, String.format("Loop #%d", ++mCounterLoop));
} catch (Exception e) {
Log.d("Error", "onCompletion: "+e.getMessage());
}
}
};