Skip to content

Instantly share code, notes, and snippets.

@Marchuck
Created June 30, 2017 21:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Marchuck/743785962b98db1522ed4ab338d664c0 to your computer and use it in GitHub Desktop.
Save Marchuck/743785962b98db1522ed4ab338d664c0 to your computer and use it in GitHub Desktop.
example of rxPlayer implementation
package xD;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.util.Log;
import hugo.weaving.DebugLog;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Cancellable;
/**
* Project ***
* <p>
* Created by Lukasz Marczak
* on 30.06.2017.
*/
public class RxPlayerMinimalistic {
public static final String TAG = RxPlayerMinimalistic.class.getSimpleName();
private Context context;
public RxPlayerMinimalistic(Context context) {
this.context = context;
}
public Observable<Boolean> play(final String path) {
return Observable.create(new MediaPlayerObservableOnSubscribe(context, path));
}
public static class MediaPlayerObservableOnSubscribe
implements ObservableOnSubscribe<Boolean>, Cancellable {
public static final String TAG = MediaPlayerObservableOnSubscribe.class.getSimpleName();
MediaPlayer mediaPlayer;
final String assetPath;
final Context context;
public MediaPlayerObservableOnSubscribe(Context context, String assetPath) {
this.assetPath = assetPath;
this.context = context;
}
@Override public void subscribe(final ObservableEmitter<Boolean> emitter) throws Exception {
emitter.setCancellable(this);
mediaPlayer = new MediaPlayer();
mediaPlayer.reset();
AssetFileDescriptor afd = context.getAssets().openFd(assetPath);
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override public void onPrepared(MediaPlayer mp) {
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override public void onCompletion(MediaPlayer mp) {
stopPlay(mp);
emitter.onNext(true);
emitter.onComplete();
}
});
}
});
mediaPlayer.prepareAsync();
}
@Override public void cancel() throws Exception {
stopPlay(mediaPlayer);
}
public boolean stopPlay(MediaPlayer mediaPlayer) {
if (mediaPlayer == null) {
return false;
}
mediaPlayer.setOnPreparedListener(null);
mediaPlayer.setOnCompletionListener(null);
try {
mediaPlayer.stop();
} catch (IllegalStateException ignored) {
}
try {
mediaPlayer.reset();
} catch (IllegalStateException ignored) {
}
try {
mediaPlayer.release();
} catch (IllegalStateException ignored) {
}
return true;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment