gpt4 book ai didi

ios - 为什么 vimeo HTML 播放器会中断我的应用程序 Audio Session ?

转载 作者:行者123 更新时间:2023-11-29 05:08:46 25 4
gpt4 key购买 nike

在我的应用程序(音频基础应用程序)中,我正在播放远程音频。

开始玩之前我设置了以下类别

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

因此,当我播放音频时,我还在 WKWebView 中播放 vimeo 视频,这会导致音频中断。如何避免这种行为?

<!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>

最佳答案

发生中断是因为 WKWebview 声音由不同的进程和单独的 AVAudioSession 处理。当声音通过 WKWebview.playback 标签(或其 JavaScript 对应项)播放时,<audio> AVAudioSessionCategory 类别将切换到 <video>。这必须是您的 vimeo 播放使用的底层机制(否则不会发生中断)。

您可以选择两条主要路线:

1) 如果您同意主应用程序声音(不是 WKWebView 的声音)与任何其他 iOS 声音(例如 iPod 音乐播放)混合,那么请按照评论中 @Rog 的建议,为您的应用程序使用 .ambient主要应用程序 Audio Session 类别。 (这也会导致您的应用程序主 Audio Session 在硬件静音开关处于关闭位置时不发出声音)。

2) 更灵活但需要仔细的计时处理是为主应用程序 Audio Session .mixWithOthers 类别另外设置 .playback 选项。一旦检测到 .mixWithOthers 播放完它自己的声音,您就将删除 WKWebView。从用户的角度来看,它会显示为您的应用程序始终使用 .playback

我在回答 here 中介绍了一些相关的主题

关于ios - 为什么 vimeo HTML 播放器会中断我的应用程序 Audio Session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59891247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com