1

Я использую приливную Hi-Fi для потоковой передачи музыки под Linux (Mint 17, 64bit) с Chrome. Чтобы добиться идеального воспроизведения, я отключаю pulseaudio ($ killall pulseaudio), чтобы просто использовать alsa для обработки звука и вывода на мой USB DAC. Тем не менее, воспроизведение останавливается после каждой песни, и мне нужно вручную выбрать следующую песню для воспроизведения. Удивительно, но эта проблема не возникает, если я использую pulseaudio.

Буду благодарен за любые подсказки, как исправить это поведение.

1 ответ1

2

Я понимаю, что это старый вопрос, но недавно я столкнулся с той же проблемой и нашел решение.

Кажется, проблема связана с предварительной загрузкой треков в Tidal. Поскольку вы не используете pulseaudio, Google Chrome создает новый аудиоконтроллер каждый раз, когда начинается воспроизведение трека из вашего плейлиста. Плеер Tidal ожидает, что тот же аудиоконтроллер будет на месте, когда начнется воспроизведение следующей песни, что приведет к зависанию.

Я решил эту проблему путем отладки кода проигрывателя javascript в Tidal, внедрив мои изменения через прокси-сервер «man in the middle» (ищите mitmproxy, отличное программное обеспечение). Тем самым я мог изменить поведение игрока. Изменяя следующую функцию:

function m(t) {
    t || w.pause(), g(), e.trigger("track:switched", A), I = void 0, S && x === A ? (o.player !== o.preloadPlayer && (o.player.stop(), o.setMediaPlayer(o.preloadPlayer)), u(T, S, t), x = void 0, T = void 0, S = void 0) : f(A, p, k)
}

в

function m(t) {
    t || w.pause(), g(), e.trigger("track:switched", A), I = void 0, S && x === A, f(A, p, k)
}

Я избавился от проблемы. Последняя функция всегда будет вызывать функцию `f ', создавая тем самым нового игрока, избегая проблемы с предварительной загрузкой.

Шаги, которые вы должны пройти, это:

  1. Установите mitmproxy и его сертификаты
  2. Настройте браузер на использование mitmproxy (вы можете найти настройки в Меню-> Настройки-> Дополнительно-> Изменить настройки прокси
  3. Запустите mitmproxy следующим образом: mitmproxy -p 8888 --script tidal.py

Содержание Tidal.py ниже. Обратите внимание, что вам нужно скачать файл .js, внести изменения и поместить его в место, где его можно загрузить, например, в тот же каталог, что и файл tidal.py. Удачи!

import cStringIO
from libmproxy.protocol.http import decoded

def response(context, flow):
    if flow.match("~u http://listen.tidal.com/v1.6.4-p-5/app.js") and flow.response.headers.("content-type", "").startswith("application/x-javascript"):
        with decoded(flow.response):
            try:
                injected_script = cStringIO.StringIO(open('./app.js', 'rb').read())
                flow.response.content = injected_script.getvalue()
            except Exception as e:
                print e
                pass

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .