RxAndroidAudio
RxAndroidAudio copied to clipboard
How to get player progress
How do I get the player progress to display it in a seekbar? The MediaPlayer is always null for me.
Could you please debug why do you always get null?
rxAudioPlayer = RxAudioPlayer.getInstance();
rxAudioPlayer.play(PlayConfig.file(audioFile).looping(false).build())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<Boolean>() {
@Override
public void onSubscribe(final Disposable disposable) {
Log.d("MEDIA", "onSubscribe");
}
@Override
public void onNext(final Boolean aBoolean) {
// prepared
Log.d("MEDIA", "onNext");
}
@Override
public void onError(final Throwable throwable) {
Log.d("MEDIA", "onError");
}
@Override
public void onComplete() {
Log.d("MEDIA", "onComplete");
// play finished
// NOTE: if looping, the Observable will never finish, you need stop playing
// onDestroy, otherwise, memory leak will happen!
}
});
MediaPlayer is null in onNext, surely here it should have been prepared?
Actually not, here is code:
/**
* play audio from local file. should be scheduled in IO thread.
*/
public Observable<Boolean> play(@NonNull final PlayConfig config) {
if (!config.isArgumentValid()) {
return Observable.error(new IllegalArgumentException(""));
}
return Observable.<Boolean>create(emitter -> {
MediaPlayer player = create(config);
setMediaPlayerListener(player, emitter);
player.setVolume(config.mLeftVolume, config.mRightVolume);
player.setAudioStreamType(config.mStreamType);
player.setLooping(config.mLooping);
if (config.needPrepare()) {
player.prepare();
}
emitter.onNext(true);
player.start();
mPlayer = player;
}).doOnError(e -> stopPlay());
}
To fix this problem, we can move mPlayer = player before emit onNext, PR is welcome!
Yeah just saw that. Was it just left there from the PR that exposed the MediaPlayer? Cheers