AIMP Forum
AIMP for Android => Вопросы / Questions => Topic started 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)
Хотелось бы услышать ваши комментарии, возможно ли это сделать в какой-нибудь бета-версии?
-
Тут у меня вопрос: возможно ли переопределять класс 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. Дайте мне время до вечера. Я подготовлю сборку с дополнительным логгированием
-
Вот, попробуйте:
https://disk.yandex.ru/d/lYjBv8pFHppIrQ
-
Вот, попробуйте:
Сделал логи:
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 - дамп медиасессии
-
Давайте пока разберемся со второй проблемой, а то путаница в голове (вот почему я прошу создавать по одной теме на баг).
Попробуйте эту сборку:
https://disk.yandex.ru/d/9junjBzQwuO0Lw
-
Давайте пока разберемся со второй проблемой, а то путаница в голове (вот почему я прошу создавать по одной теме на баг).
Как скажете) Да, работает отлично, спасибо! Нужны какие-то логи с неё?
И что изменилось, если не секрет?
-
И что изменилось, если не секрет?
По началу я заменил Handler-ы на потоки, т.к. с проблемами с первыми я уже сталкивался (MessageQueue в Андроиде работает с очень низким приоритетом и частенько сообщения обрабатываются заторможенно). Не помогло. Последняя сборка поднимает Wakelock на одну минуту в случае прихода нажатия клавиши (как вы и предлагали изначально).
Как скажете) Да, работает отлично, спасибо! Нужны какие-то логи с неё?
Вот еще сборка, давайте устроим финальный прогон (я подчистил код и оформил решение как надо):
https://disk.yandex.ru/d/nal1pozBTxkTGQ
-
Вот еще сборка, давайте устроим финальный прогон (я подчистил код и оформил решение как надо):
Что-то эта версия не работает :(
лог: 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 - проснулось
-
Пардон, мой косяк, поправил:
https://disk.yandex.ru/d/1AoIWleyUBn92Q
-
Пардон, мой косяк, поправил:
https://disk.yandex.ru/d/1AoIWleyUBn92Q
Да, эта работает и засыпает через 15 секунд на паузе, как и раньше было, спасибо!
-
Сегодня добрался до лога с первой проблемой.
19:05:00 - дамп медиасессии
19:05:32 - запустил другой плеер и нажал на "play"
19:05:40 - дамп медиасессии
Пока все верно - две медиасессии, первая - от последнего плеера.
19:06:33 - возвращаюсь в aimp и нажимаю на "play" в виджете
19:07:02 - дамп медиасессии
Вот тут интересно, несмотря на то, что timestamp (updated) у AIMP-а свежее, дампер его ставит в конец.
Если не секрет - что за инструмент использовался для дампа?
-
Если не секрет - что за инструмент использовался для дампа?
Да 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)
-
Вы знаете, а на моих устройствах переключение медиа сессии работает как надо - система корректно определяет, кто последний из плееров играл.
-
В качестве эксперимента, попробуйте, как будет вести себя вот эта сборка:
https://disk.yandex.ru/d/CBKjJ4IzKJtTYA
-
В качестве эксперимента, попробуйте, как будет вести себя вот эта сборка:
Ничего не изменилось :( От типа вывода звука это же никак не зависит?
-
От типа вывода звука это же никак не зависит?
Кто знает, все может быть в Андроиде.
А у вас какой метод вывода установлен?
-
А у вас какой метод вывода установлен?
Ставлю AudioTrack обычно (судя по всему в авто он же выбирается?), только с ним при закрытии и открытии сервиса aimp переключается этот MediaButtonReceiver.
-
Ставлю AudioTrack обычно (судя по всему в авто он же выбирается?), только с ним при закрытии и открытии сервиса aimp переключается этот MediaButtonReceiver.
Да, начиная с Android 8 (и до 12).
-
Проверил со всеми тремя выводами звука - на Android 11 и 13 все работает, как и должно - система засекает факт старта воспроизведения и переключает медиа сессии.
А у вас требование аудиофокуса для воспроизведения не отключено, случаем?
-
А у вас требование аудиофокуса для воспроизведения не отключено, случаем?
В аудиофокусе включены все 4 галки, а иначе начинается одновременное воспроизведение с обоих плееров.
Мда, очень интересно...
система засекает факт старта воспроизведения и переключает медиа сессии.
и в MediaButtonReceiver всегда последний проигрываемый плеер? Вы через гарнитуру проверяете?
-
и в MediaButtonReceiver всегда последний проигрываемый плеер? Вы через гарнитуру проверяете?
Да, всегда последний проигрываемый. Нет, не через гарнитуру - через виджет в шторке (чтобы переключиться между плеерами, ведь гарнитура будет управлять тем плеером, который сейчас играет)
-
ведь гарнитура будет управлять тем плеером, который сейчас играет)
Дык в этом-то и проблема, что нет)
-
Дык в этом-то и проблема, что нет)
Нет, проблема в том, что система не видит, что заиграл AIMP. Осталось понять, почему так происходит. Видимо, придется искать похожее устройство...
-
Видимо, придется искать похожее устройство...
А нет ли, случайно, какого-то открытого проекта с похожей реализацией вывода звука, чтобы я сам мог пособирать у себя, может чего накопаю?
-
А нет ли, случайно, какого-то открытого проекта с похожей реализацией вывода звука, чтобы я сам мог пособирать у себя, может чего накопаю?
Знать бы, что именно влияет - тогда бы я смог что-то посоветовать. Так-то у меня ничего особенного и не используется.
-
Знать бы, что именно влияет - тогда бы я смог что-то посоветовать. Так-то у меня ничего особенного и не используется.
Штук 20 разных плееров с f-droid проверил, ничего похожего не нашёл, все плееры через шторку перехватывают управление... Подозреваю, что есть какая-то разница при запуске сервиса и просто старта проигрывания по тапу на кнопку.
-
Подозреваю, что есть какая-то разница при запуске сервиса и просто старта проигрывания по тапу на кнопку.
Через какую именно кнопку запускали?
Разница может быть лишь в том, что у нас сервис сам не закрывается - его остановка происходит по крестику в шторке или команде "выход" в главном меню
-
Через какую именно кнопку запускали?
Да тут не играет роли, запускал и через виджет на раб. столе и через шторку уведомлений (там вообще куча плееров висит) и через основной экран самого плеера. Причем в самом плеере когда нахожусь, хардверные кнопки управляют аимпом, но стоит перейти на рабочий стол, то всё...
-
Причем в самом плеере когда нахожусь, хардверные кнопки управляют аимпом
С этим как раз понятно, активити имеет приоритет.
-
Да тут не играет роли, запускал и через виджет на раб. столе и через шторку уведомлений (там вообще куча плееров висит) и через основной экран самого плеера. Причем в самом плеере когда нахожусь, хардверные кнопки управляют аимпом, но стоит перейти на рабочий стол, то всё...
Какой именно у вас Hiby R5? Первого или второго поколения?
-
Какой именно у вас Hiby R5? Первого или второго поколения?
Первого, но думаю у всей линейки R (R5, R6, R8), которая на андроиде примерно одинаковое ПО + Cayin N6ii + Tempotec V6 скорее всего тоже.
-
Первого, но думаю у всей линейки R (R5, R6, R8), которая на андроиде примерно одинаковое ПО + Cayin N6ii + Tempotec V6 скорее всего тоже.
Нашел на барахолке в Москве Б/У вариант
-
Попробуйте эту сборку:
https://disk.yandex.ru/d/1w2E2707ydIKgQ
-
Попробуйте эту сборку:
Спасибо огромное, всё теперь работает. Куда донатить?)
P.S. Эти изменения попадут в официальные версии или это эксклюзив? Как удалось решить?
-
Спасибо огромное, всё теперь работает. Куда донатить?)
Увы, у меня кроме СБП больше ничего и не осталось...
P.S. Эти изменения попадут в официальные версии или это эксклюзив?
Да они попадут, но в данный момент они эксклюзив для устройств HiBy. Вот сейчас размышляю, как лучше сделать: патч применять для всего, для hiBy или опцию ввести.
Как удалось решить?
Делаю рестарт output-а на низком уровне при получении фокуса
-
Увы, у меня кроме СПБ больше ничего и не осталось...
Да они попадут, но в данный момент они эксклюзив для устройств HiBy. Вот сейчас размышляю, как лучше сделать: патч применять для всего, для hiBy или опцию ввести.
Делаю рестарт output-а на низком уровне при получении фокуса
СБП имеете в виду? Давайте номер, попробую) Интересно, конечно, неужели это очередной косяк хибарей? Странно что у множества других плееров, кроме poweramp такого не наблюдается...
-
СБП имеете в виду? Давайте номер, попробую) Интересно, конечно, неужели это очередной косяк хибарей?
Да, конечно, опечатался.
Странно что у множества других плееров, кроме poweramp такого не наблюдается...
Ну вот у меня на паузе, output-не останавливался, а паузился, держа интерфейс доступа к устройству, видимо, так делать "не хорошо"...