Музыкальные проекты

Навигация по проекту

  • inProgress
    new album
    COMING SOON
  • alienation
    album release
    ALIENATION
  • worstway
    single release
    WORST WAY
  • totalinsane
    album release
    TOTAL INSANE
  • steelharbour
    album release
    STEEL HARBOUR
  • statuses
    creating status
    PLANNING
  • project
    Project info
    ABOUT

суббота, 4 июля 2026 г.

Еще одна техническая новость

Итак, кажется, получилось. По крайней мере, последние тесты показали, что проделанная работа была проделана не зря. Плееры работают, скрипт действует корректно. И даже некоторые внезапно обнаруженные проблемы тоже решаемы.
По порядку. Самое главное достижение, как по мне, я свел обертку к одной строке. То есть, теперь для запуска плеера не нужно копипастить всю его разметку, достаточно одной строки div с указанием класса и несколькими параметрами, главный из которых - id плейлиста в библиотеке iBroadcast. На этом все, остальную часть разметки (которая у всех будет одинаковой!) скрипт запихнет сам. К тому же, это сильно упростит возможную будущую доработку скрипта. Дело в том, что для переделки алгоритма пришлось переломать еще и разметку. Так вот, чтобы больше не бегать по постам и не искать, где там еще надо что-то поправить, теперь код разметки зашит в самом скрипте и если её надо будет поправить, будет достаточно исправления в самом скрипте.
Дальше, я отказался от использования id элементов, как это было в предыдущей рабочей версии. Это устранило ошибки, возникающие от самого наличия нескольких плееров с однинаковым id на странице (это когда несколько постов с релизами на одной странице). Теперь для поиска используется class, поиск идет по всем плеерам, сколько их есть на странице, столько скрипт и обрабатывает.
Переписал и блок стилей css, и сам скрипт. От оригинального кода в скрипте вообще мало что осталось, я сознательно писал в более удобном мне стиле. Предыдущая версия собиралась, скажем так, из кусков, оттуда там был некоторый бардак. Где-то обработчики событий задавались прямо в разметке, где-то цеплялись скриптом и т.д. Сейчас все одинаково задается. Самое забавное то, что пользователи этого не заметят, я полностью сохранил прежний внешний вид. А css переписать пришлось из-за перехода с id на class.
Интересный момент, я говорил в прошлом посте, что единый плеер, исключающий воспроизведение нескольких треков одновременно получится сам по себе. Это оказалось не так, первые же тесты показали, что прекрасно запускается какофония из треков, было бы желание. Однако, я все-таки реализовал защиту от какофонии, так что в пределах страницы на треки можно тыкать как угодно, играть всегда будет только один.
И последнее, самое неочевидное, что всплыло внезапно и оказалось несколько проблематичным к исправлению. Отказоустойчивость. Пока оно все работает - оно работает. Но бывает, что какой-то из плееров не прогружается. И приходится обновлять страницу. Еще веселый момент, токен доступа к iBroadcast имеет срок жизни час. Соответственно, если загрузить страницу, подождать час и попытаться проиграть трек - будет тишина, плюс, сам плеер будет вести себя неадекватно. Решение придумал простое. Переделал обработку ошибок в блоке запроса плейлиста (откуда ссылки на треки получаются с как раз токенами), и сделал проверку на ошибку на выходе из этого запроса. И если выпадает ошибка - поставил перезапуск запроса с двухсекундной задержкой. Причем, эта штука вызывается и в случае ошибки воспроизведения, только там есть проверка, если плейлист пустой, значит идет первичная загрузка плейлиста, если плейлист не пустой - попытка проиграть музыку провалилась и надо обновить токены в плейлисте. И это, пришлось еще в случае такого провала дать пользователю понять, что надо чуть подождать, в плеере возвращаются надписи, как до загрузки.

Комментариев нет:

Отправить комментарий