Cordova媒体插件无法录制音频

时间:2017-07-10 21:15:17

标签: android cordova cordova-plugins cordova-media-plugin

所以我很难用Cordova Media Plugin来录制音频 我的代码:

    var my_media = new Media("toto.3gp",
          ()=>onSuccess(),
          (err)=>onError(err),
          (status)=>mediaStatus(status)
        );
    console.log(my_media); // Media {id: "07053344-6274-09eb-62ca-d63f099f2a4b", src: "toto.3gp", _duration: -1, _position: -1}
    my_media.startRecord();
    console.log(my_media); // Media {id: "07053344-6274-09eb-62ca-d63f099f2a4b", src: "toto.3gp", _duration: -1, _position: -1}

我确保媒体对象已正确初始化并且确实如此。

在Android控制台上我得到了这个:

07-10 19:59:20.019 31861-31917/com.phonegap.reacthotloadingtemplate E/MediaRecorder: start failed: -2147483648
07-10 19:59:20.019 31861-31917/com.phonegap.reacthotloadingtemplate E/PluginManager: Uncaught exception from plugin
                                                                                     java.lang.RuntimeException: start failed.
                                                                                         at android.media.MediaRecorder.start(Native Method)
                                                                                         at org.apache.cordova.media.AudioPlayer.startRecording(AudioPlayer.java:160)
                                                                                         at org.apache.cordova.media.AudioHandler.startRecordingAudio(AudioHandler.java:287)
                                                                                         at org.apache.cordova.media.AudioHandler.promptForRecord(AudioHandler.java:543)
                                                                                         at org.apache.cordova.media.AudioHandler.execute(AudioHandler.java:118)
                                                                                         at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:98)
                                                                                         at org.apache.cordova.PluginManager.exec(PluginManager.java:132)
                                                                                         at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:57)
                                                                                         at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
                                                                                         at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
                                                                                         at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:39)
                                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                         at android.os.Looper.loop(Looper.java:154)
                                                                                         at android.os.HandlerThread.run(HandlerThread.java:61)

媒体权限由插件(自动)正确设置:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

那么您认为问题是什么?

2 个答案:

答案 0 :(得分:1)

当cordova-media-plugin开始录制时,它首先创建一个名为/storage/emulated/0/tmprecording-.3gp的文件 然后它将该文件重命名为您提供的任何名称,而不将其转换为任何其他格式,因此支持3gp,我意识到我的问题是由于android sdk 23及更高版本的权限更改,因此sdk 23引入了运行时权限。所以我刚刚将config.xml中的androidTargetSdk更改为22,它解决了我的问题。

答案 1 :(得分:0)

该错误表示正好在调用Android MediaRecorder start方法时发生错误。我不认为cordova-plugin-media支持3gp扩展。在插件中,我在源代码(AudioHandler.java)中找到了以下注释:

* Audio formats supported (tested):
*   .mp3, .wav

但如果我没记错,我还设法用该插件记录.amr文件。