2017-07-10 93 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