Cordova Media不会播放来自www的mp3

Dav*_*lor 4 android cordova

我在StackOverflow上找到了很多关于这个问题的潜在解决方案,但似乎没有什么能解决它.我正在尝试使用我的Cordova(3.5)应用程序中播放mp3文件org.apache.cordova.media@0.2.10

var sound = new Media('audio/el/hello.mp3');
sound.play()
Run Code Online (Sandbox Code Playgroud)

但它只是不会播放,我在LogCat中收到以下错误

MediaPlayer error (1, -2147483648)
Run Code Online (Sandbox Code Playgroud)

我尝试在本地提供文件夹,以下工作指向同一个文件

var sound = new Media('http://10.0.2.2:9999/www/audio/el/hello.mp3');
sound.play()
Run Code Online (Sandbox Code Playgroud)

这表明它不是因为文件有编码问题.

我无法使用最新版本的media插件,因为deviceready事件永远不会触发.

更新:我刚尝试将文件解压缩到持久存储并从那里播放它们,我得到了同样的错误.

更新:单步执行AudioPlayer.java源代码似乎该www目录不是资产的一部分,因为以下调用将抛出FileNotFoundExceptionwheref == "www/el/hello.mp3"

fd = this.handler.cordova.getActivity().getAssets().openFd(f);
Run Code Online (Sandbox Code Playgroud)

但是,如果我将文件直接放在assets文件夹中,那么它的工作原理.

Han*_* Le 7

媒体文件的路径不正确.你必须正确地获得路径:

var getPathMedia = function () {
var path = window.location.pathname;
var phoneGapPath = path.substring(0, path.lastIndexOf('/') + 1);
// Return path at www folder
return 'file://' + phoneGapPath;
};
var media = new Media(getPathMedia() + 'media/message.mp3');
media.play();
Run Code Online (Sandbox Code Playgroud)


Dev*_*eks 5

在android上,您只需要具有正确的www文件夹路径。

Android:

var media = new Media("/android_asset/www/audio/el/hello.mp3",
    successFunction,
    errorFunction
);
Run Code Online (Sandbox Code Playgroud)

如果您的应用程序也要在iOS上运行,则需要/android_asset/www/动态添加,因为iOS不需要它。

iOS:

var media = new Media("audio/el/hello.mp3",
    successFunction,
    errorFunction
);
Run Code Online (Sandbox Code Playgroud)