2016-05-20 4 views
1

Ich benutze Cordova, um eine HTML5/JS-App zu erstellen.Cordova Record Audio auf ios9 funktioniert nicht

Ich muss Audio aufzeichnen und abspielen, also verwende ich Media & Datei-Plug-Ins, aber ich habe Probleme, damit es unter iOS funktioniert.

Meine Schritte:

1)

ich erkennen Plattform (Android oder iOS).

Wenn Android, keine Notwendigkeit, etwas einzustellen, funktioniert es.

Wenn Ios, stelle ich die Datei URI '../Library/NoCloud/' (nach Raymond Camden article Lesen),

dann erstelle ich Datei vor der Aufnahme:

var mediaBaseUrl = ''; 
if(app.isIOS){ 
      mediaBaseUrl ='../Library/NoCloud/'; 
      createFileSystem(); 
} 

Meine Funktion Create ist :

createFileSystem : function(){ 
     var fileName= mediaBaseUrl+[myFileName]; 

     //asking for a new space 
     window.requestFileSystem(
      LocalFileSystem.PERSISTENT, 
      0, 

      //success 
      function(fileSystem){ 

       fileSystem.root.getFile(

        fileName, 
        { create: true, exclusive: false }, 

        //success callback 
        function(){ 
         console.log('ok file created'); 
        }, 
        null 
       ); 
      }, 

      // error 
      function() { 
       console.log("***log: failed in creating media file in requestFileSystem"); 
      } 
     ); 
    }, 

2) Sobald Datei erstellt wird, mache ich mit Media-Konstruktor aufgenommene Datei:

var recordedFile = new Media(
       mediaBaseUrl + [myFileName], 

       // success callback 
       function() {}, 

       // error callback 
       function (err) { 
        console.log("recorded file error "); 
        console.log(err) 
       } 
      ); 

3) In Config XML, habe ich diese Zeile in iOS Library-Ordner aufnehmen, und ohne Speichern in Cloud:

<preference name="iosPersistentFileLocation" value="Library" /> 
    <preference name="BackupWebStorage" value="none" /> 

Mein Problem:

Auf Android-Gerät, alles ist in Ordnung kann ich dann aufzeichnen Audiodatei aufzeichnen.

Aber auf dem iOS-Gerät (ipad2), sind einige Dinge seltsam:

  • mit meinem Dateinamen "../Library/NoCloud/myFileName", ich habe keinen Erfolg Rückruf für fileSystem.root.getFile Funktion , aber ich kann eine Datei mit dem guten Namen und dem guten Platz in meinem ipad Bibliothek/NoCloud-Ordner sehen, , außer die Datei ist leer. Der Medienkonstruktor kann die Datei nicht wiedergeben und gibt daher einen Fehler zurück.

  • wenn ich myFileName als „myFileName“ gesetzt, ich habe den Rückruf der Erstellung der Datei (‚ok Datei erstellt‘), aber die Medien Konstruktor kann nicht auf die Datei zugreifen und zurück die Fehler:

    message: "Cannot use audio file from resource 'test.wav'", code: 1 
    

Ich habe das iPad Mikrofon überprüft, es ist für diese App aktiviert. Ich glaube es funktionierte vor dem iOS Update auf dem iPad (jetzt iOS 9.3.2), btu bin ich mir nicht mehr sicher. Gibt es etwas, das ich falsch gemacht habe, oder gibt es eine neue Art zu verarbeiten?

danke!

+0

ich bin verwirrt - warum Sie die Datei erstellen * vor * die Aufnahme? Sollte es nicht genau das Gegenteil sein? –

+0

Ok, ... ich bin auch verwirrt :) Ich denke, ich war völlig falsch in der Art, über den Prozess nachzudenken: Ich dachte, dass iOS einen Speicherort vorher schreiben muss, um es mit den aufgezeichneten Daten zu füllen. Aber das ist offensichtlich nicht der Fall. Also wenn ich jetzt verstehe: Hat das System die Audiodaten aufgenommen, muss ich die FileSystem Funktion nur zum Speichern meiner aufgezeichneten Daten anfordern? Vielen Dank ! –

+0

In der Tat habe ich einige Artikel gelesen, bevor ich meinen Code schrieb, zum Beispiel dieser http://stackoverflow.com/questions/9241157/using-phonegap-to-record-audio-to-documents-folder-on-ios in Es wird gesagt, dass eine Dateireferenz vor der Erstellung der Mediendatei erstellt wird, da ios eine src benötigt, die bereits existiert ... deshalb habe ich diesen Code geschrieben ... –

Antwort

0

Sie müssen cdvfile umfassen: // localhost/library-nosync/mit/Library/NoCloud

, Das cdvfile ist: // localhost/library-nosync // Library/NoCloud in der URL angegeben werden muss sorce

die uRL Erinnern gegeben vorausgesetzt Bibliothek Ordner im www-Ordner ist und es folgt

Dieses Problem wird es von ios9 und nach

+0

danke, ich werde es versuchen! –

+0

Schließlich funktioniert das nicht mit Ihrem Trick. Auf der anderen Seite war das Problem nicht hier. Es ist mir gelungen, die Datei zu erstellen, aber sie wurde wegen einer anderen Mediendatei (Audio), die zur selben Zeit abgespielt wurde, nicht aufgezeichnet. Wenn ich diese Datei nicht abgespielt habe, ist die Aufnahme in Ordnung (wenn ich die Datei vorher erstellt habe). Es scheint, dass der Zugriff auf das cordova media plug-in mit dem cordova media plug-in nicht gleichzeitig möglich ist. Danke für Ihre Hilfe. –