首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MediaPlayer: Cordova 6.1.1中的错误(1,-2147483648),相位为2.4.6

MediaPlayer: Cordova 6.1.1中的错误(1,-2147483648),相位为2.4.6
EN

Stack Overflow用户
提问于 2016-04-22 02:07:57
回答 1查看 320关注 0票数 0

我试图在一个由Cordova 6.1.1和Phaser.io 2.4.6构建的安卓游戏中播放音频文件。媒体不会在API 21左右的Android版本上播放,并给出了错误。

代码语言:javascript
复制
04-21 21:48:57.546 9659-9671/com.jtronlabs.birdu E/MediaPlayer: error (1, -2147483648)
04-21 21:48:57.546 9659-9672/com.jtronlabs.birdu E/MediaPlayer: Error (1,-2147483648)

我读过一些这样的答案,但没有任何帮助。我使用Phaser的Loader类加载音频:

代码语言:javascript
复制
this.load.audio('background-music', this.arrayOfCompatibleMusicFileNames('the_plucked_bird') ); 

..。

代码语言:javascript
复制
//Phaser has support to load in multiple types of audio formats if the first supplied in the array is not compatible with the browser.
arrayOfCompatibleMusicFileNames: function(key){
  //old versions of android don't play music, they require an absolute pathname (instead of relative). This is a generic solution
  //https://stackoverflow.com/questions/4438822/playing-local-sound-in-phonegap?lq=1
  var path = window.location.pathname;
  path = path.substr( 0, path.lastIndexOf("/")+1 ); //need to remove 'index.html' from the end of pathname
  var aud = path+'assets/audio/';

  //aud = '/android_res/raw/'
  var wav = aud + 'wav/';
  var ogg = aud + 'ogg/';
  var mp3 = aud + 'mp3/';

  console.log(mp3+key+".mp3");

  return [mp3+key+".mp3",ogg+key+".ogg",wav+key+".wav"];
},

这在浏览器和Android的新版本上都是有效的。在较早的版本中,我尝试添加多个格式绝对路径、将权限外部写到/www并将文件从/www迁移到根/平台/android/res/raw

都是白费的。有什么可能会出错的想法吗?

编辑:当音频文件在“res”文件夹中时,我将它们引用如下:

代码语言:javascript
复制
arrayOfCompatibleMusicFileNames: function(key){
  return ['/android_res/raw/'+key+".ogg"];
}

它在API 21上工作,但不是19或更低(就像第一个函数一样)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-22 11:40:52

我已经让音频工作使用科多瓦-插件-媒体

代码语言:javascript
复制
var path = window.location.pathname;
path = path.substr( 0, path.lastIndexOf("/")+1 ); //need to remove 'index.html' from the end of pathname
var aud = path+'assets/audio/';

var ogg = aud + 'ogg/' + key + ".ogg";

//works!
var snd = new Media(ogg);
snd.play();

然而,我发现这种“正常”的方式是导致不良行为的原因。

代码语言:javascript
复制
//does not work... Phaser uses this internally
var snd = new Audio(ogg);
snd.play();

似乎我将不得不编写代码来测试它是浏览器还是cordova,并分别使用“Media”或“Audio”。

更新:我编写了这段代码,它使事情变得很混乱,但很有效。现在我使用人行横道,而WebAudio工作在所有设备上。在我的代码中不需要媒体插件和额外的案例检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36783554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档