Подсчет продолжительности воспроизведения с использованием отдельных наблюдаемых для текущего состояния и прогресса - PullRequest
0 голосов
/ 10 апреля 2019

Давайте предположим, что у нас есть 2 наблюдаемые.

1-й генерирует изменения состояния (например, STATE_PLAY, STATE_PAUSE, STATE_FINISHED)

2-й генерирует изменения прогресса времени (например, 1000, 2000,3000, 4000 (в миллисекундах))

Что мне нужно сделать: в основном, мне нужно вычислить, как долго мы были в состоянии == STATE_PLAY (состояние можно изменить несколько раз здесь, что-то вроде STATE_PLAY ->STATE_PAUSED -> STATE_PLAY -> STATE_PAUSED -> STATE_PLAY -> STATE_FINISHED)

Другими словами - когда мы получаем состояние STATE_PLAY с 1-й наблюдаемой, нам нужно получить последнее значение прогресса и сохранить его как «интервал воспроизведения, начиная сзначение".После этого нам нужно пропустить все выбросы прогресса, пока мы не получим любое другое состояние кроме STATE_PLAY от 1-й наблюдаемой.Как только мы получим состояние! = STATE_PLAY, нам нужно снова получить последнее значение прогресса и сохранить его как «конечное значение игрового интервала».После этого нам нужно вычислить разницу между конечными и начальными значениями, просто выполнив простое вычитание «конечное значение» - «начальное значение», а затем добавить полученное значение к некоторой буферной переменной.

Я думал сделать это с помощьюиспользуя Observable.combineLatest (), где мы будем получать обновления, когда любой из наших наблюдаемых генерирует новое значение, затем - фильтрует его по состоянию == STATE_PLAY, получает соответствующее значение прогресса и каким-то образом сохраняет его в качестве начального значения, затем каким-то образом пропускает вседругие выбросы, пока состояние не изменится на любое другое, кроме STATE_PLAY, затем - получите соответствующее значение из хода выполнения, вычислите разницу между конечным и начальным значением и увеличьте текущую «буферную» переменную с этой разницей.

Однако я застрял спревращая эти слова выше в какой-то правильный код Rx.

Может быть, моя идея с использованием combLatest здесь совершенно неверна, но это только то, что мне пришло в голову.

Может ли кто-нибудь указать мне на хорошийрешение, чтобы решить это?

Спасибозаранее.

...