изменение политики автозапуска в сети возобновление контекста не включает звук - PullRequest
0 голосов
/ 07 мая 2018

Я работаю над прогрессивным веб-приложением, которое в основном используется на компьютерах и Android для воспроизведения музыки. На ПК все отлично работает. На Android он вдруг перестал работать. После некоторых исследований я обнаружил это обновление, касающееся изменения политики автозапуска в chrome.

Суть в том, что вы больше не можете просто воспроизводить мультимедиа без взаимодействия с пользователем.

До этого обновления у меня был свой AudioContext, который создается onload, а потом просто используется. Это больше не работает.

В сообщении об обновлении говорится:

AudioContext должен быть создан или возобновлен после того, как документ получил пользовательский жест, чтобы включить воспроизведение звука

Итак, я внес некоторые изменения в .suspend() и .resume() контекст соответственно onPlay и onPause моего приложения.

На ПК это все еще работает, на Android - нет. Я что-то упустил?

Редактировать 1:

Я нашел этот сайт, заявив следующее:

В соответствии с новой политикой медиаконтент будет разрешен для автозапуска под следующие условия:

a) Контент отключен или не содержит аудио (только видео)

б) Пользователь нажал или щелкнул где-то на сайте во время просмотра сессия

c) На мобильном телефоне, если пользователь добавил сайт на главный экран пользователем

d) на рабочем столе, если пользователь часто воспроизводил мультимедиа на сайте, согласно Индексу вовлеченности СМИ

Я понимаю, что это правда, если один из этих совпадений. В моем случае б) и в) выполнены. Итак, я думаю, это должно работать?

1 Ответ

0 голосов
/ 20 марта 2019

Вам нужно вызывать resume () в аудио контексте для события действия пользователя, такого как нажатие кнопки. Я предполагаю, что ваша проблема была в том месте, где вы вызвали context.resume () не было в событии взаимодействия с пользователем. Вы не можете просто позвонить с onLoad.

Пример кода:

// Existing code unchanged.
window.onload = function() {
  var context = new AudioContext();
  // Setup all nodes
  ...
}

// One-liner to resume playback when user interacted with the page.
document.querySelector('button').addEventListener('click', function() {
  context.resume().then(() => {
    console.log('Playback resumed successfully');
  });
});

Документы описывают это здесь: https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio

...