2016-01-17 23 views

Odpowiedz

5

Nie ma sposobu, aby uzyskać autoodtwarzanie pracy w przeglądarkach mobilnych. (To nie jest dozwolone)

Ale niektóre sztuczki robią to.

Kliknij na linki poniżej, aby zobaczyć kilka sztuczek

Autoplay audio on mobile safari

iOS-Specific Considerations | Loop Attribute

+0

Masz rację o autoodtwarzania dla tagu 'audio' , ale wygląda na to, że możesz automatycznie odtwarzać dźwięk za pomocą 'AudioContext' (zobacz moją odpowiedź). – Xenos

8

Można odtwarzać dźwięk za pomocą AudioContext API i biorąc źródło, z dowolnego ArrayBuffer (tj: od A XMLHttpRequest lub a File)

window.addEventListener('load', function() { 
     var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); 
     var source = audioCtx.createBufferSource(); 
     var xhr = new XMLHttpRequest(); 
     xhr.open('GET', 'audio-autoplay.wav'); 
     xhr.responseType = 'arraybuffer'; 
     xhr.addEventListener('load', function (r) { 
      audioCtx.decodeAudioData(
        xhr.response, 
        function (buffer) { 
         source.buffer = buffer; 
         source.connect(audioCtx.destination); 
         source.loop = false; 
        }); 
      source.start(0); 
     }); 
     xhr.send(); 
    }); 

Live example

Prace nad Chrome i Firefox zarówno mobilnych i stacjonarnych

Edit:

Warto wspomnieć, IMO, że ten „trick” w rzeczywistości może być uznane jako błąd przeglądarki, a może nie działać w za każdym razem, gdy przeglądarka uzna, że ​​to zepsuje doświadczenie użytkownika/staje się powszechnie używaną uciążliwością (np. reklamy).

Warto również wspomnieć, że, przynajmniej na moim telefonie i FF 54, dźwięk będzie nadal grał, nawet jeśli Twój telefon jest wyciszony ...

+0

Należy podkreślić, że to rozwiązanie doprowadzi do wycieku pamięci lub ogromnego zużycia pamięci dla plików audio większych niż 1 MB. Szacuje się, że plik audio zakodowany w wielkości 1 MB będzie wynosił 11 MB zdekodowanego bufora danych w pamięci. –

+0

@FarzadYZ Byłoby interesujące, gdybyś mógł pokazać, że jest to "wyciek pamięci" (co do którego wątpię i nie jest to kwestia wykonanego kodu JS, ale kwestia przeglądarki, czyli executora) lub "ogromnej pamięci" Zużycie "(w porównaniu ze zwykłym znacznikiem dźwiękowym) – Xenos

+0

Ładowanie dźwięku, dekodowanie go za pomocą interfejsu API" audio ", tworzenie' AudioBufferSourceNode' i gra, co daje większą elastyczność, ale ma dość istotne zastrzeżenie: to spowoduje awarię twojego telefonu. Istnieje prosty powód. Przeglądarka musi przechowywać cały plik audio, dekodowany w pamięci, który, ponieważ plik mp3 o szybkości 5 Mb zazwyczaj odpowiada plikowi WAV 55 MB, szybko można znaleźć brak pamięci, jeśli używasz dużych plików audio. Kiedy tak się dzieje, sposób, w jaki się o tym dowiesz, to cały tabut. –

Powiązane problemy