Воспроизведение аудио на iPad

Я работаю над сайтом, на котором есть чат для клиента, однако у нас возникают проблемы со звуком в iPad (iOS 5).

На самом деле целью является iPad с поддержкой IE7.

Я пробовал эти подходы:

HTML5

<audio id="notification" preload="auto">
    <source src="audio/notification.ogg" type="audio/ogg" />
    <source src="audio/notification.mp3" type="audio/mpeg" />
</audio>

С некоторыми javascript

var el = document.getElementById('notification');
el.play();

Некоторая функция javascript Я украл где-то, что на самом деле представляет собой два разных метода в одной функции. Обратите внимание: script находится в поддире, поэтому путь правильный.

function notify() {
    var url = '../audio/notification.mp3';
    var a = document.createElement('audio');

    if(!!(a.canPlayType && a.canPlayType('audio/mpeg').replace(/no/, ''))) {
        var sound = new Audio(url);
        sound.load();
        sound.play();
    } else {
        $('#notification').remove();
        var sound = $('<embed id="notification" type="audio/mpeg" src="'+url+'" loop="false" hidden="true" autostart="true" />');
        $(body).append(sound);
    }
}

Оба метода, похоже, не работают. Я что-то делаю неправильно?

Ответы

Ответ 1

Ну, ответ был несколько очевиден.

После того, как вы потратили много времени на исследования и т.д., я нашел статью в официальной документации Safari:

В Safari на iOS (для всех устройств, включая iPad), где пользователь может находиться в сотовой сети и заряжаться на единицу данных, предварительная загрузка и автовоспроизведение отключены. Никакие данные не загружаются до тех пор, пока пользователь не инициирует его. Это означает, что методы JavaScript play() и load() также неактивны, пока пользователь не начнет воспроизведение, если только метод play() или load() не вызван действием пользователя. Другими словами, пользовательская кнопка воспроизведения работает, но событие onLoad = "play()" не работает.

Итак, в принципе, вы не можете запускать звук без запуска пользователя сначала. В качестве решения я создал кнопку отключения звука, которая отключена по умолчанию, поэтому вам нужно щелкнуть по ней, которая воспроизводит звук уведомления. Впоследствии я могу использовать Javascript для воспроизведения звука без взаимодействия с пользователем.

Спасибо, Safari за это великое будущее. Большое спасибо.

Ответ 2

С выпуском iOS 6 для iPad звук, воспроизводимый во время onLoad, по-прежнему не поддерживается для iPad.

Для iPhone с iOS 6 аудио будет воспроизводиться только во время html-сайта onLoad, если в iPhone подключены наушники, подключенные к аудиоразъему на iPhone.

Ответ 3

Apple iPad не позволяет воспроизводить звуки без щелчка пользователя, ранее инициирующего его.

Решение: добавьте кнопку воспроизведения/паузы.

App.toggle_audio = function(elem) {
  var icon = elem.find("i");
  var playing = _.include(icon.attr('class').split(" "), "icon-pause")
  if (playing) {
    elem.html("<i class='icon-play'></i> " + App.translate_play_audio);
    App.play_audio_toggle = false;
  } else {
    App.audio_file.load();
    elem.html("<i class='icon-pause'></i> " + App.translate_pause_audio);
    App.play_audio_toggle = true;
  }
}

Как только пользователь нажал кнопку после загрузки аудио. Затем вы можете воспроизвести его через Javascript.

  if (App.play_audio_toggle) {
    App.audio_file.play();
  }

Ответ 4

Попробуйте поместить MP3 в качестве первого источника, а не второго. IPad имел обыкновение иметь проблему, где он всегда играл первый источник независимо от того, что (возможно, оно было исправлено к настоящему времени, но это стоит попробовать).

Также попробуйте изменить type на audio/mp3.