Фоновый звук ExoPlayer с видео на переднем плане? - PullRequest
0 голосов
/ 03 июня 2019

Я использую ExoPlayer для воспроизведения мультимедиа в приложении Android.

Когда вы открываете видео в моем приложении, я хочу, чтобы видео было видно, а вы слышите звук - как на любом обычном носителеplayer.

Однако, когда вы закрываете приложение, я хочу, чтобы звук продолжал воспроизводиться в фоновом режиме с уведомлением о воспроизведении, приостановке и перезапуске содержимого.

Я знаю, что яможет заставить аудио вести себя таким образом, если экземпляр ExoPlayer создан внутри Сервиса.Однако для того, чтобы видео было видимым, экземпляр ExoPlayer должен быть передан PlayerView, а PlayerView должен работать в потоке пользовательского интерфейса.

Если экземпляр ExoPlayer определен в службе и выполняется в служберабочий поток, в то время как PlayerView определен в Activity и выполняется в потоке пользовательского интерфейса, тогда как я могу передать экземпляр ExoPlayer в PlayerView?AIDL ограничен примитивными типами (String, long, boolean и т. Д.), Поэтому это не представляется возможным.

Я бы предпочел, чтобы звук не останавливался и не перезапускался при закрытии приложения (как это было быслучай, если у меня было два отдельных игрока - один в Сервисе и один в потоке пользовательского интерфейса).Мне бы хотелось, чтобы служба обрабатывала всю загрузку мультимедиа, декодирование и воспроизведение звука, и я бы хотела каким-то образом привязаться к службе, чтобы отображать декодированные кадры, возвращаемые из ExoPlayer.

1 Ответ

0 голосов
/ 21 июня 2019

Как я отмечал в этом вопросе, вы не можете передать экземпляр ExoPlayer как в PlayerView, так и в Службу, но если экземпляр ExoPlayer доступен через Singleton, то и PlayerView, и Служба смогут получить к нему доступ.напрямую используя методы Singleton.

Проблема, с которой я столкнулся, заключается в том, что когда я создавал приложение таким образом, Singleton (и экземпляр ExoPlayer) жили в пространстве процесса приложения, а не в службе переднего плана.Поэтому, когда приложение было уничтожено, служба продолжала работать, но ее экземпляр ExoPlayer был уничтожен (уведомление оставалось активным, но звук отключен)

Я пока не уверен, как сохранить Singleton в процессе службыпространство.Это может быть просто вопрос обеспечения доступа службы к Синглтону до того, как это сделает приложение.

...