2016-11-02 2 views
0

J'essaie de télécharger le fichier mp3 avec Alamofire et l'enregistrer à l'emplacement désiré. Ensuite, à partir de cet endroit, j'essaie de lire ce fichier, mais cela me donne une erreur.OSStatus error 1685348671 AVAudioPlayer

C'est la fonction de téléchargement

func downloadSong(song: Song, completion: @escaping(Bool) ->()) { 

     var headers: HTTPHeaders = [:] 

     if let authorizationHeader = Request.authorizationHeader(user: Constants.authName, password: Constants.authKey) { 
      headers[authorizationHeader.key] = authorizationHeader.value 
     } 

     let destination: DownloadRequest.DownloadFileDestination = { _, _ in 
      let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
      let fileURL = documentsURL.appendingPathComponent("\(song.getID()).mp3") 

      return (fileURL, [.removePreviousFile, .createIntermediateDirectories]) 
     } 

     Alamofire.download(APIEndpoint.Song(id: song.getID(), token: self.authToken!).path(), method: .get, headers: headers, to: destination).response { (response) in 
      if response.error == nil, let filePath = response.destinationURL?.path { 
       print(filePath) 
       completion(true) 
      } else { 
       completion(false) 
      } 
     } 

    } 

Ceci est une fonction de lecture

func playSong() { 

     guard let songs = currentPlaylist?.getSongs() else { return } 

     let song = songs[0] 

     let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 

     let destinationUrl = documentsDirectoryURL.appendingPathComponent("\(song.getID()).mp3") 
     print(destinationUrl) 

     if FileManager.default.fileExists(atPath: destinationUrl.path) { 
      print("The file already exists at path") 

      do { 
       try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
       try AVAudioSession.sharedInstance().setActive(true) 

       player! = try AVAudioPlayer(contentsOf: destinationUrl, fileTypeHint: AVFileTypeMPEGLayer3) 

       player!.play() 
      } catch let error as NSError { 
       print("error: \(error.localizedDescription)") 
      } 
     } 

    } 

Je voudrais savoir la meilleure pratique de télécharger le fichier et l'enregistrer puis jouer.

+0

[Le code d'erreur ressemble à quelque chose ne va pas avec le fichier.] (Https://www.osstatus.com/search/results?platform=all&framework=all&search=1685348671) –

+0

Oh, merci, je ne savais pas à propos de ce site! Alors, comment dois-je télécharger le fichier avec Alamofire et l'enregistrer en tant que fichier mp3, ou comment charger le fichier à partir de l'URL de destination? – sphynx

+1

Rien dans votre code ne me semble incorrect. Assurez-vous que le fichier est un mp3 valide et pas comme une page 404 ou quelque chose. –

Répondre

-1

J'ai découvert, que j'ai entré la mauvaise URL de l'API, donc il m'a donné un fichier non valide qui n'est pas jouable.

+0

ce n'est pas utile pour les autres, s'il vous plaît préciser ce qui était exactement faux, ou ce n'est pas acceptable réponse. – Martian2049