AIMP Forum

AIMP for Android => Вопросы / Questions => Topic started by: snoopy112 on August 23, 2022, 14:09:59

Title: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on August 23, 2022, 14:09:59
Приветствую, у меня плеер Hiby R5 с условно стоковым Android 8.1 и на этом устройстве есть некоторые проблемы с работой AIMP (текущая версия v3.30, build 1213 Beta).

Первая проблема - это сложность в захвате медиасессии после перехода с другого приложения, воспроизводящего аудио.
То есть, если просто нажать на "play" в виджете AIMP при играющем соседнем плеере, то при нажатии на хардверные кнопки самого плеера (или гарнитуры) после, управление осуществляется предыдущим плеером, а AIMP ставится на паузу (настройка фокуса). "Лечится" это только завершением всех аудио-приложений, которые находятся в фоне и перезапуском AIMP. Тут у меня вопрос: возможно ли переопределять класс MediaSessionCompat каждое нажатие на "play" и перехватывать сессию заново?

Вторая проблема - скорее проблема самой ОС, но у некоторых приложений я такого не заметил: заключается в том, что после того, как плеер уходит в сон, нажатие на хардверную кнопку "play" не начинает воспроизведение моментально (задержка может составлять несколько минут, пока система не решит обработать запрос), хотя в сам AIMP прилетает кейэвент сразу же после нажатия, судя по логам.

Лог с примером: https://drive.google.com/file/d/1oX03qO9j63xD2YTMJynJCzViWCp1tOiW/view?usp=sharing (https://drive.google.com/file/d/1oX03qO9j63xD2YTMJynJCzViWCp1tOiW/view?usp=sharing)
Нажатие на кнопку во сне - 03:06:01
Начало проигрывания - 03:06:54

Насколько я понимаю, некоторые плееры перед тем, как начать воспроизведение, проверяют наличие wakelock'а и если ничего нет (то есть девайс спит), создают новый на время, пока не остановили/поставили на паузу. Можно ли повторить подобное поведение и в AIMP? Знаю, что можно установить постоянный wakelock в настройках и предотвратить уход в спящий режим, но это сильно влияет на жизнь батарейки и при этом плеер никогда не отключится при остановке.

Обе эти проблемы я не наблюдаю в данном проекте, может это как-то поможет:
https://github.com/AP-Atul/music_player_lite/blob/main/src/app/src/main/java/com/atul/musicplayerlite/player/PlayerService.java (https://github.com/AP-Atul/music_player_lite/blob/main/src/app/src/main/java/com/atul/musicplayerlite/player/PlayerService.java)

Хотелось бы услышать ваши комментарии, возможно ли это сделать в какой-нибудь бета-версии?
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 24, 2022, 10:36:49
Тут у меня вопрос: возможно ли переопределять класс MediaSessionCompat каждое нажатие на "play" и перехватывать сессию заново?

При нажатии на плей, плеер и так запрашивает у системы аудио-фокус. Аудио-фокус имеет ссылку на токет медиа-сессии. Таким образом, система может найти активную медиа-сессию по активному аудио-фокусу. Было бы здорово, если бы вы прислали лог к этой проблеме тоже.

Лог с примером: https://drive.google.com/file/d/1oX03qO9j63xD2YTMJynJCzViWCp1tOiW/view?usp=sharing
Нажатие на кнопку во сне - 03:06:01
Начало проигрывания - 03:06:54

Да, забавно. Ресейвер вызвал startService сразу, а сервис стартовал лишь через минуту. Пути андроида неисповедимы...

Насколько я понимаю, некоторые плееры перед тем, как начать воспроизведение, проверяют наличие wakelock'а и если ничего нет (то есть девайс спит)

Да, АИМП так и делает, но он это делает в сервисе, а у вас выходит, что сам сервис стартовал с адовой задержкой.

Обе эти проблемы я не наблюдаю в данном проекте, может это как-то поможет:
https://github.com/AP-Atul/music_player_lite/blob/main/src/app/src/main/java/com/atul/musicplayerlite/player/PlayerService.java

Кстати, в этом плеере wakelock хоть и объявлен, но нигде не используется (нет вызова acquire).

P.S. Дайте мне время до вечера. Я подготовлю сборку с дополнительным логгированием
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 25, 2022, 16:44:41
Вот, попробуйте:
https://disk.yandex.ru/d/lYjBv8pFHppIrQ
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on August 25, 2022, 18:59:11
Вот, попробуйте:

Сделал логи:
1) лог aimp: https://drive.google.com/file/d/11JxtUD24XIoehWVcKiYbJhgkknekdnUc/view?usp=sharing (https://drive.google.com/file/d/11JxtUD24XIoehWVcKiYbJhgkknekdnUc/view?usp=sharing)
2) лог медиасессии: https://drive.google.com/file/d/1fLXzD6C78kfubiVWshJJEmq_IXYUhwtj/view?usp=sharing (https://drive.google.com/file/d/1fLXzD6C78kfubiVWshJJEmq_IXYUhwtj/view?usp=sharing)
    теряется Media button session и Last MediaButtonReceiver соответсвенно, судя по всему

Порядок действий такой:

(Вторая проблема с выходом из сна, только aimp активный)
18:48:02 - нажатие на h/w "play" во сне
18:48:19 - начал играть
18:48:28 - пауза

18:50:02 - нажатие на h/w "play" во сне
18:50:03 - начал играть почти сразу
18:50:14 - пауза

18:52:02 - нажатие на h/w "play" во сне
18:57:02 - нажатие на h/w "play" ещё раз
18:59:02 - нажатие на h/w "play" и ещё раз
18:59:32-48 - разбудил через "power", нажал на "play" в виджете на раб столе и поставил на паузу

19:02:03 - нажатие на h/w "play" во сне
19:03:53 - начал играть

----------------------------------------------
(Первая проблема с медиасессией/кнопками управления)

19:05:00 - дамп медиасессии
19:05:32 - запустил другой плеер и нажал на "play"
19:05:40 - дамп медиасессии
19:06:33 - возвращаюсь в aimp и нажимаю на "play" в виджете
19:07:02 - дамп медиасессии
19:07:13 - нажал на h/w "play" -> aimp ставится на паузу и начинает играть другой плеер
19:08:03 - закрыл другой плеер крестиком в верхнем выпадающем меню
19:08:31 - дамп медиасессии

- Хардверные кнопки не работают (не управляют теперь ничем)

19:09:11 - закрыл и запустил заново aimp (кнопки заново стали работать)
19:10:00 - дамп медиасессии
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 25, 2022, 22:50:22
Давайте пока разберемся со второй проблемой, а то путаница в голове (вот почему я прошу создавать по одной теме на баг).
Попробуйте эту сборку:
https://disk.yandex.ru/d/9junjBzQwuO0Lw
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on August 26, 2022, 00:12:57
Давайте пока разберемся со второй проблемой, а то путаница в голове (вот почему я прошу создавать по одной теме на баг).

Как скажете) Да, работает отлично, спасибо! Нужны какие-то логи с неё?
И что изменилось, если не секрет?
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 26, 2022, 08:59:16
И что изменилось, если не секрет?

По началу я заменил Handler-ы на потоки, т.к. с проблемами с первыми я уже сталкивался (MessageQueue в Андроиде работает с очень низким приоритетом и частенько сообщения обрабатываются заторможенно). Не помогло. Последняя сборка поднимает Wakelock на одну минуту в случае прихода нажатия клавиши (как вы и предлагали изначально).

Как скажете) Да, работает отлично, спасибо! Нужны какие-то логи с неё?

Вот еще сборка, давайте устроим финальный прогон (я подчистил код и оформил решение как надо):
https://disk.yandex.ru/d/nal1pozBTxkTGQ
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on August 26, 2022, 14:09:54
Вот еще сборка, давайте устроим финальный прогон (я подчистил код и оформил решение как надо):

Что-то эта версия не работает  :(

лог: https://drive.google.com/file/d/1KiG0xYPTHjjEBc5B673mVWy39mzEs9Nn/view?usp=sharing (https://drive.google.com/file/d/1KiG0xYPTHjjEBc5B673mVWy39mzEs9Nn/view?usp=sharing)

15:00:01 - play
15:01:49 - проснулось

15:05:01 - play
15:06:51 - проснулось
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 26, 2022, 14:22:04
Пардон, мой косяк, поправил:
https://disk.yandex.ru/d/1AoIWleyUBn92Q
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on August 26, 2022, 14:42:58
Пардон, мой косяк, поправил:
https://disk.yandex.ru/d/1AoIWleyUBn92Q

Да, эта работает и засыпает через 15 секунд на паузе, как и раньше было, спасибо!
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 29, 2022, 21:34:16
Сегодня добрался до лога с первой проблемой.

19:05:00 - дамп медиасессии
19:05:32 - запустил другой плеер и нажал на "play"
19:05:40 - дамп медиасессии

Пока все верно - две медиасессии, первая - от последнего плеера.

19:06:33 - возвращаюсь в aimp и нажимаю на "play" в виджете
19:07:02 - дамп медиасессии

Вот тут интересно, несмотря на то, что timestamp (updated) у AIMP-а свежее, дампер его ставит в конец.
Если не секрет - что за инструмент использовался для дампа?
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on August 29, 2022, 22:55:24
Если не секрет - что за инструмент использовался для дампа?

Да dumpsys media_session через adb, просто сделал скрипт, чтобы в файл это всё писалось. Потом немного доработал уже, чтобы только нужные поля выводить.
dump_pc.sh https://drive.google.com/file/d/1VqIl0_U2RUEzMnlK40NpJUhTeMKwZxdH/view?usp=sharing (https://drive.google.com/file/d/1VqIl0_U2RUEzMnlK40NpJUhTeMKwZxdH/view?usp=sharing)
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 31, 2022, 09:05:58
Вы знаете, а на моих устройствах переключение медиа сессии работает как надо - система корректно определяет, кто последний из плееров играл.
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 31, 2022, 09:12:33
В качестве эксперимента, попробуйте, как будет вести себя вот эта сборка:
https://disk.yandex.ru/d/CBKjJ4IzKJtTYA
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on August 31, 2022, 10:32:28
В качестве эксперимента, попробуйте, как будет вести себя вот эта сборка:

Ничего не изменилось :( От типа вывода звука это же никак не зависит?
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 31, 2022, 10:50:35
От типа вывода звука это же никак не зависит?

Кто знает, все может быть в Андроиде.
А у вас какой метод вывода установлен?
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on August 31, 2022, 11:15:09
А у вас какой метод вывода установлен?

Ставлю AudioTrack обычно (судя по всему в авто он же выбирается?), только с ним при закрытии и открытии сервиса aimp переключается этот MediaButtonReceiver.
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 31, 2022, 11:19:22
Ставлю AudioTrack обычно (судя по всему в авто он же выбирается?), только с ним при закрытии и открытии сервиса aimp переключается этот MediaButtonReceiver.

Да, начиная с Android 8 (и до 12).
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on August 31, 2022, 11:33:00
Проверил со всеми тремя выводами звука - на Android 11 и 13 все работает, как и должно - система засекает факт старта воспроизведения и переключает медиа сессии.

А у вас требование аудиофокуса для воспроизведения не отключено, случаем?
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on August 31, 2022, 11:40:13
А у вас требование аудиофокуса для воспроизведения не отключено, случаем?

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

система засекает факт старта воспроизведения и переключает медиа сессии.

и в MediaButtonReceiver всегда последний проигрываемый плеер? Вы через гарнитуру проверяете?
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on September 02, 2022, 10:36:51
и в MediaButtonReceiver всегда последний проигрываемый плеер? Вы через гарнитуру проверяете?

Да, всегда последний проигрываемый. Нет, не через гарнитуру - через виджет в шторке (чтобы переключиться между плеерами, ведь гарнитура будет управлять тем плеером, который сейчас играет)
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on September 02, 2022, 10:45:11
ведь гарнитура будет управлять тем плеером, который сейчас играет)

Дык в этом-то и проблема, что нет)
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on September 02, 2022, 12:05:49
Дык в этом-то и проблема, что нет)

Нет, проблема в том, что система не видит, что заиграл AIMP. Осталось понять, почему так происходит. Видимо, придется искать похожее устройство...
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on September 02, 2022, 13:51:29
Видимо, придется искать похожее устройство...

А нет ли, случайно, какого-то открытого проекта с похожей реализацией вывода звука, чтобы я сам мог пособирать у себя, может чего накопаю?
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on September 02, 2022, 14:55:31
А нет ли, случайно, какого-то открытого проекта с похожей реализацией вывода звука, чтобы я сам мог пособирать у себя, может чего накопаю?

Знать бы, что именно влияет - тогда бы я смог что-то посоветовать. Так-то у меня ничего особенного и не используется.
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on September 02, 2022, 17:07:43
Знать бы, что именно влияет - тогда бы я смог что-то посоветовать. Так-то у меня ничего особенного и не используется.

Штук 20 разных плееров с f-droid проверил, ничего похожего не нашёл, все плееры через шторку перехватывают управление... Подозреваю, что есть какая-то разница при запуске сервиса и просто старта проигрывания по тапу на кнопку.
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on September 02, 2022, 18:47:10
Подозреваю, что есть какая-то разница при запуске сервиса и просто старта проигрывания по тапу на кнопку.


Через какую именно кнопку запускали?
Разница может быть лишь в том, что у нас сервис сам не закрывается - его остановка происходит по крестику в шторке или команде "выход" в главном меню
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on September 02, 2022, 18:54:42
Через какую именно кнопку запускали?

Да тут не играет роли, запускал и через виджет на раб. столе и через шторку уведомлений (там вообще куча плееров висит) и через основной экран самого плеера. Причем в самом плеере когда нахожусь, хардверные кнопки управляют аимпом, но стоит перейти на рабочий стол, то всё...
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on September 02, 2022, 20:53:12
Причем в самом плеере когда нахожусь, хардверные кнопки управляют аимпом

С этим как раз понятно, активити имеет приоритет.
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on September 02, 2022, 23:46:33
Да тут не играет роли, запускал и через виджет на раб. столе и через шторку уведомлений (там вообще куча плееров висит) и через основной экран самого плеера. Причем в самом плеере когда нахожусь, хардверные кнопки управляют аимпом, но стоит перейти на рабочий стол, то всё...

Какой именно у вас Hiby R5? Первого или второго поколения?
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on September 03, 2022, 03:07:03
Какой именно у вас Hiby R5? Первого или второго поколения?

Первого, но думаю у всей линейки R (R5, R6, R8), которая на андроиде примерно одинаковое ПО + Cayin N6ii + Tempotec V6 скорее всего тоже.
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on September 03, 2022, 12:43:44
Первого, но думаю у всей линейки R (R5, R6, R8), которая на андроиде примерно одинаковое ПО + Cayin N6ii + Tempotec V6 скорее всего тоже.

Нашел на барахолке в Москве Б/У вариант
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on September 09, 2022, 00:32:20
Попробуйте эту сборку:
https://disk.yandex.ru/d/1w2E2707ydIKgQ
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on September 09, 2022, 00:42:26
Попробуйте эту сборку:

Спасибо огромное, всё теперь работает. Куда донатить?)

P.S. Эти изменения попадут в официальные версии или это эксклюзив? Как удалось решить?
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on September 11, 2022, 12:36:02
Спасибо огромное, всё теперь работает. Куда донатить?)

Увы, у меня кроме СБП больше ничего и не осталось...

P.S. Эти изменения попадут в официальные версии или это эксклюзив?

Да они попадут, но в данный момент они эксклюзив для устройств HiBy. Вот сейчас размышляю, как лучше сделать: патч применять для всего, для hiBy или опцию ввести.

Как удалось решить?

Делаю рестарт output-а на низком уровне при получении фокуса
Title: Re: Вопросы про MediaSession и Wakelock
Post by: snoopy112 on September 11, 2022, 12:44:34
Увы, у меня кроме СПБ больше ничего и не осталось...

Да они попадут, но в данный момент они эксклюзив для устройств HiBy. Вот сейчас размышляю, как лучше сделать: патч применять для всего, для hiBy или опцию ввести.

Делаю рестарт output-а на низком уровне при получении фокуса

СБП имеете в виду? Давайте номер, попробую) Интересно, конечно, неужели это очередной косяк хибарей? Странно что у множества других плееров, кроме poweramp такого не наблюдается...
Title: Re: Вопросы про MediaSession и Wakelock
Post by: Artem on September 11, 2022, 14:49:58
СБП имеете в виду? Давайте номер, попробую) Интересно, конечно, неужели это очередной косяк хибарей?

Да, конечно, опечатался.

Странно что у множества других плееров, кроме poweramp такого не наблюдается...

Ну вот у меня на паузе, output-не останавливался, а паузился, держа интерфейс доступа к устройству, видимо, так делать "не хорошо"...