首页 文章

Cordova媒体插件无法录制音频

提问于
浏览
0

所以我很难用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 回答

  • 1

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

  • 0

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

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

    但如果我记得正确的话,我也设法用该插件记录.amr文件 .

相关问题