Почему musi c не будет играть на Chrome за Android? - PullRequest
0 голосов
/ 03 апреля 2020

Мой веб-сайт воспроизводит фоновую песню и некоторые аудиоэффекты одновременно. Хотя песня загружается нормально (я вижу ее длительность через свойство Audio.duration), она не воспроизводится, пока воспроизводятся звуковые эффекты (я уже нажал на экране, чтобы активировать воспроизведение звука). На Firefox в моем P C играет без проблем. Аудио файл - это 10 МБ mp3 (но мой Android дома Wi-Fi). Ниже приведена часть моего кода.

var music,clicked=false,downloaded=false;

function play() {
    music.play();
}

function canPlay() {
    downloaded = true;
    if (clicked) {
        play();
    }
}

function touchStart(e) {
    if (!clicked) {
        clicked = true;
        if (downloaded) {
            play();
        }
    }
}

function load() {
    music = new Audio('mp3/music.mp3');
    music.addEventListener('canplaythrough',canPlay,false);
    window.addEventListener('touchstart',touchStart,false);
}

Функция load вызывается в onload из body. Переменные clicked и downloaded требуются, потому что я никогда не знаю, что произойдет первым: пользовательский щелчок или загрузка аудио завершена sh.

В тесте Google для мобильных устройств указано, что аудиофайл не может не загружается (Статус: Другая ошибка). Я прочитал этот тест не ждет более 3 секунд. Однако считывание времени песни в секундах не доказывает, что она загружена?

Почему песня не воспроизводится на мобильном телефоне?

EDIT

Я создал интервал таймера, который сообщает мне положение (music.currentTime) песни один раз в минуту. На рабочем столе это дает правильное время. На мобильном устройстве всегда отображается 0, что означает, что песня, хотя и загруженная (?), На самом деле не воспроизводится.

EDIT 2

Я исследовал обещание, возвращенное music.play(), и заметил, что выдает ошибку: «(NotAllowedError: play () не удалось, потому что пользователь не взаимодействовал с документом первым)». Кажется, что TouchStart не считается «взаимодействием с пользователем», как MouseDown ...

1 Ответ

0 голосов
/ 03 апреля 2020

В конце концов, я удалил оба touchStart и touchEnd (каждый со своим собственным preventDefault), оставляя песню для воспроизведения после полученного mouseDown. Однако я сохранил touchMove, потому что он отличается от mouseMove и необходим для моего сайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...