/** One time setup of the FFmpeg library. */ public Observable<Void> setupFFmpeg() { if (!firstSetup.get()) return Observable.just(null); firstSetup.set(false); return Observable.create( new Observable.OnSubscribe<Void>() { @Override public void call(final Subscriber<? super Void> subscriber) { LoadBinaryResponseHandler responseHandler = new LoadBinaryResponseHandler() { @Override public void onFailure() { if (subscriber.isUnsubscribed()) return; subscriber.onError(new IllegalStateException("failed to load FFmpeg binaries")); } @Override public void onSuccess() { if (subscriber.isUnsubscribed()) return; subscriber.onNext(null); subscriber.onCompleted(); } }; try { fFmpeg.loadBinary(responseHandler); } catch (FFmpegNotSupportedException e) { subscriber.onError(e); } } }); }