2015-01-30 10 views
12

Sto provando a farlo usando AVAsset per registrare il file audio e poi dopo averlo memorizzato su NSFileManager e successivamente convertendolo in nsdata i Chiama API per memorizzarlo .Come convertire AVAsset in NSData o salvarlo nel file manager

Sono riuscito a creare il file di registrazione AVAsset e riprodurlo utilizzando la classe di terze parti che è SCPlayer.

Ora il problema è che non so come utilizzare il file AVAsset per salvarlo nel file manager e quindi dopo chiamare l'API per inviarlo convertendolo in NSData.

È un modo per convertire AVAsset in NSData ???

Please Help ...

+0

ho postato una soluzione a questo problema qui: http://stackoverflow.com/questions/37611488/how-to-stream-a-video-with-avurlasset-and-save-to-disk-the-cached-data/37611489#37611489 Per me è non funzionava solo con AVAssetExportSession. Ho anche aggiunto AVAssetResourceLoaderDelegate per farlo funzionare. –

risposta

18

È possibile effettuare le seguenti operazioni:

  1. Usa AVAssetExportSession per esportare l'oggetto AVAsset in un file URL del percorso.
  2. Converti in NSData utilizzando il suo metodo dataWithContentsOfURL .

    
    NSURL *fileURL = nil; 
    __block NSData *assetData = nil; 
    
    // asset is you AVAsset object 
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality]; 
    
    exportSession.outputURL = fileURL; 
    // e.g .mov type 
    exportSession.outputFileType = AVFileTypeQuickTimeMovie; 
    
    [exportSession exportAsynchronouslyWithCompletionHandler:^{ 
        assetData = [NSData dataWithContentsOfURL:fileURL]; 
        NSLog(@"AVAsset saved to NSData."); 
    }]; 
    
  3. Non dimenticare di ripulire il file di output dopo aver fatto tutto quello che devi fare con esso;)

+0

Grazie questo è davvero utile ... :) –

+0

You're welcome @DhavalTannarana – itsProf

+0

Penso che è il modo in cui l'inizializzazione di NSData dall'URL della libreria non è accettata (restituisce nil NSData) – onmyway133

3

Si potrebbe avere uno sguardo a AVAssetExportSession

AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality]; 
exporter.outputURL = exportUrl; 

[exporter exportAsynchronouslyWithCompletionHandler:^{ 
    // here your file will be saved into file system at specified exportUrl 
}]; 
+1

Questo ha funzionato per me, ma ho bisogno di aggiungere la seguente riga: 'exporter.outputFileType = AVFileTypeMPEG4;' perché outputFileType non può essere NULL – cph2117

5

Swift 3

let manager = PHImageManager.default()  
manager.requestAVAsset(forVideo: asset, options: nil, resultHandler: { (avasset, audio, info) in 
       if let avassetURL = avasset as? AVURLAsset { 
        guard let video = try? Data(contentsOf: avassetURL.url) else { 
         return 
        } 
        videoData = video 
       } 
      }) 
+0

Questo non richiede una sessione di esportazione. L'oggetto NSData è effettivamente riproducibile dopo aver utilizzato questo metodo? – HackaZach

Problemi correlati