在发现问题几个小时后,这个解决方案适用于我,适用于桌面和移动浏览器以及 iOS 和 Android 上的 Cordova。它解决了以下发现:
- 在 iOS 上,
<audio> 有效,但没有音量控制。
- 在 Android 上,
<audio> 不起作用,需要媒体插件。
- 在 iOS 上,
<audio> 元素的 src 属性可用于 Media 对象,在 Android 上,src 属性可用于js Audio 对象有效。
-
setVolume()方法必须在play()之后直接调用才能生效。
- 在 Android 上,从未调用过媒体事件处理程序。这很糟糕,因为根据documentation,release() 方法应该在播放后调用。 此问题尚无解决方案。
该示例有一个静态音频元素,其 src 路径相对于 Cordova 的 www 文件夹中的 index.html。启动时,脚本会检查 Cordova 并设置 DeviceReady 处理程序,如果是的话。然后找到音频元素并通过 playAudio() 播放。
HTML 头部:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1">
<title>Audio Example</title>
<script src="cordova.js"></script>
<script>
var config = {
audioVolume: 0.25
}
// Use onDeviceReady if we run in Cordova
window.addEventListener('load', function(){
if (window.Cordova) {
console.log("Cordova found");
document.addEventListener('DeviceReady', start, false);
} else {
console.log("Cordova not found, using pure html audio")
start();
}
}, false);
function start() {
var audioElement = document.querySelector("audio");
playAudio(audioElement);
}
function playAudio(ae) {
var source, me, successFunction, onSuccess, onError;
onSuccess = function() {
console.log('Playing ' + ae.src + ' at volume ' + config.audioVolume);
me.release();
}
onError = function(e) {
console.log('ERROR on playing ' + ae.src + ' at volume ' + config.audioVolume
+ ': (' + e.code + ') ' + e.message);
}
onStatusChange = function(s){
console.log('Media status changed to ' + s);
if (s === Media.MEDIA_STOPPED) onSuccess();
}
// If running in Cordova and Media plugin loaded, use that
if (typeof Media === "function") {
source = device.platform === 'iOS'
? ae.getAttribute('src') // relative path
: ae.src; // file-url, platform-dependant
me = new Media(source, onSuccess, onError, onStatusChange);
me.play();
me.setVolume(config.audioVolume);
} else {
ae.volume = config.audioVolume;
ae.play();
}
}
</script>
HTML 正文:
<audio src="sounds/mysound.mp3"></audio>