2017-07-10 71 views
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" /> 

那么你认为是什么问题?

+0

任何人都可以帮忙吗? –

回答

1

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

0

该错误表明恰好在Android MediaRecorder启动方法被调用时发生错误。我不认为cordova-plugin-media支持3gp扩展。在插件,我发现在源代码(AudioHandler.java)以下注释:

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

但是,如果我没有记错的话,我也设法记录.AMR与插件文件。

+0

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

+0

这很好,我很高兴你找到问题背后的原因。 – Edin

+0

您可以将您的解决方案添加为答案,并将其标记为正确答案,以便将您的问题标记为正确答案。 – Edin