2016-08-24 210 views
3

我目前正在用Swift構建一個iPhone應用程序,我想從我的應用程序發送音頻文件到我的網絡服務器。我目前使用MPMediaPickerController,這讓我我的應用程序中選擇音頻文件,但一旦我選擇文件,它不斷告訴我:iOS發送音頻文件到網絡服務器

的iPod庫://item/item.mp3 ID = 12341234

我無法將文件發送到我的Web服務器。我需要以NSData的格式將音頻文件發送到我的網絡服務器。任何人都可以照亮一盞燈爲:

1)什麼我可以做錯了,或者

2)另一種方式來發送音頻文件?

+1

分享自己當前的源代碼上傳服務器端 – ddb

回答

1
import AssetsLibrary, 
import AVFoundation, 
import MediaPlayer, 
var soundFileURL:URL!, 
var audio_data: Data? = nil** 

    func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) 
    { 
     let item = mediaItemCollection.items[0] as? MPMediaItem ?? MPMediaItem() 
     let url: URL? = item.value(forProperty: MPMediaItemPropertyAssetURL) as? URL 

     exportiTunesSong(assetURL: url!) 
     { 
      (response) in 
      print(response ?? "responce") 
     } 

     let songTitle: String = item.value(forProperty: MPMediaItemPropertyTitle) as! String 
     lbl_for_file_name.text = songTitle 

     self.dismiss(animated: true, completion: nil) 
    } 


    func mediapicker() 
    { 
     let mediaPicker = MPMediaPickerController(mediaTypes: .music) 
     mediaPicker.delegate = self 
     present(mediaPicker, animated: true, completion: {}) 
    } 


    func mediaPickerDidCancel(_ mediaPicker: MPMediaPickerController) 
    { 
     print("User selected Cancel tell me what to do") 
     self.dismiss(animated: true, completion: nil) 
     mediaPicker.dismiss(animated: true) { _ in } 

    } 

    func exportiTunesSong(assetURL: URL, completionHandler: @escaping (_ fileURL: URL?) ->()) { 

     let songAsset = AVURLAsset(url: assetURL, options: nil) 

     let exporter = AVAssetExportSession(asset: songAsset, presetName: AVAssetExportPresetAppleM4A) 

     exporter?.outputFileType = "com.apple.m4a-audio" 

     exporter?.metadata = songAsset.commonMetadata 

     let filename = AVMetadataItem.metadataItems(from: songAsset.commonMetadata, withKey: AVMetadataCommonKeyTitle, keySpace: AVMetadataKeySpaceCommon) 


     var songName = "Unknown" 

     if filename.count > 0 { 
      songName = ((filename[0] as AVMetadataItem).value?.copy(with: nil) as? String)! 
     } 

     //Export mediaItem to temp directory 
      exportURL = URL(fileURLWithPath: NSTemporaryDirectory()) 
      .appendingPathComponent(songName) 
      .appendingPathExtension("m4a") 

     exporter?.outputURL = exportURL 
     do 
     { 
      self.audio_data = try Data.init(contentsOf: exportURL!) 
      print("here audio data is \(self.audio_data!)") 

     } catch { 
      print(error) 
     } 
    } 

P.S使用Audio_data發送或使用Alamofire

相關問題