У меня есть действие (скажем, упражнение A), которое отображает видео с помощью медиаплеера, отображаемого в виде поверхности.
Вариант использования: приостановить видео, запустить другое действие (скажем, действие B), а затем вернуться к занятию A.
Деятельность A останавливается, но не уничтожается при переходе к B, что хорошо.
Поверхностный вид (поскольку он не виден) уничтожается (как видно из обратных вызовов уведомлений).
Когда вы возвращаетесь к заданию A и перезапускаете медиаплеер с помощью start (), медиаплеер воспроизводит звук, но видео не видно. Подобные ошибки выводятся на Logcat:
11-16 18:14:44.532: ERROR/Overlay(8630): Error = Invalid argument from qbuf
К сожалению, использование нового экземпляра SurfaceHolder
, предоставленного surfaceCreated()
, не помогает (т.е. выдает ту же ошибку).
Я читал в различных постах, решение было бы сбросить mediaplayer
и перезапустить его полностью, однако это неэффективно, так как конечный пользователь должен будет ждать подготовки всего игрока cycle + seekTo last positio
n внутри потока .
Как видно из того факта, что звук воспроизводится, между видеодекодером и новым surfaceholder/view
должен стоять вопрос.
Каким должно быть лучшее решение (лучшее = самое быстрое) для возобновления воспроизведения видео при возобновлении активности?