WebHU - Programozási kérdések és válaszok

miért szakítja meg a vimeo HTML lejátszó az alkalmazás audio munkamenetét?

Az alkalmazásomban (audio alapalkalmazás) távoli hangot játszok le.

a játék megkezdése előtt beállítottam a következő kategóriát

AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])

így hang lejátszása közben a vimeo videót is lejátszom a WKWebView-ban, ami hangmegszakítást okoz. hogyan lehet elkerülni ezt a viselkedést?

<!DOCTYPE html>
        <html>
        <body>
        <style type="text/css">
        body, html {width: 100%; height: 100%; margin: 0; padding: 0;background:black}
        .main {position: absolute;top: 0; left: 0; right: 0; background-color: #101010;height:100%;}
        .main iframe {display: block; width: 100%; height: 100%; border: none;}
        </style>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
        <script src="https://player.vimeo.com/api/player.js"></script>
        <div class="main">
        <iframe src=\(url)></iframe>
        </div>

        <script src="https://player.vimeo.com/api/player.js"></script>
        <script>
        var iframe = document.querySelector('iframe');
        var player = new Vimeo.Player(iframe);

        player.on('play', function() {
        window.webkit.messageHandlers.play.postMessage("play")
        });

        player.on('pause', function() {
        window.webkit.messageHandlers.pause.postMessage("pause")
        });

        player.on('ended', function(data) {
        window.webkit.messageHandlers.ended.postMessage("ended")
        });

        player.on('bufferstart', function(data) {
        window.webkit.messageHandlers.bufferstart.postMessage("bufferstart")
        });

        player.on('bufferend', function(data) {
        window.webkit.messageHandlers.bufferend.postMessage("bufferend")
        });

        Promise.all([player.getVideoWidth(), player.getVideoHeight()]).then(function(dimensions) {
        window.webkit.messageHandlers.dimensions.postMessage(dimensions)
        });

        player.getDuration().then(function(duration) {
            window.webkit.messageHandlers.duration.postMessage(duration);
        });

        player.ready().then(function () {
        player.setVolume(1)
        window.webkit.messageHandlers.ready.postMessage("ready");
        });

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

        function pause() {
        player.pause();
        }

        function destroy() {
        player.destroy();
        }

        </script>

        </body>
        </html>

  • Rossz kategóriát használ – próbálja inkább a AVAudioSessionCategory.ambient-t. 24.01.2020

Válaszok:


1

A megszakítás azért történik, mert a WKWebview hangot más folyamat és egy külön AVAudioSession kezeli. A WKWebview AVAudioSessionCategory kategória .playback-re vált, miközben a hangok <audio> vagy <video> címkéken (vagy JavaScript-társain) keresztül szólalnak meg. Ez lehet az a mechanizmus, amelyet a vimeo lejátszása használ (különben a megszakítások nem fordulnak elő).

2 fő útvonalon indulhatsz:

1) Ha rendben van a fő alkalmazáshangok (nem a WKWebView) keverése bármilyen más iOS-hanggal (például az iPod zenelejátszásával), akkor kövesse @Rog javaslatát a megjegyzésben, hogy használja a .ambient-t a fő alkalmazás hangos szekciójához. kategória. (Ez azt is eredményezi, hogy az alkalmazás fő hangmenete nem ad ki hangot, miközben a hardveres néma kapcsoló kikapcsolt állásban van).

2) Rugalmasabb, de gondos időzítést igénylő megoldás az, ha ezenkívül .mixWithOthers beállításokat ad meg az alkalmazás fő audiosession .playback kategóriájához. El kell távolítania a .mixWithOthers fájlt, ha azt észleli, hogy a WKWebView befejezte a saját hangjának lejátszását. Felhasználói szemszögből úgy tűnik, hogy az alkalmazásod folyamatosan a .playback szolgáltatást használja.

Valamelyik kapcsolódó témával foglalkoztam a válaszomban itt

26.01.2020
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..