2017-02-02 3 views
0

Unten ist mein Code, um AVQueueplayer mit einigen Web-URL zu spielen, aber es dauert fast 10-20 Sekunden, um den ersten Song zu spielen. Ich habe 10 Songs, aber als Referenz und um es klein zu machen, habe ich nur einen Song hier behalten.AVQueuePlayer braucht viel Zeit, um das erste Lied zu spielen

arrSongs = ["http://radiotaj.com/music/1/1836.mp3"] 
    let index = 0 
    let strSong = (arrSongs.object(at: index)) as? String 
    playerItem = AVPlayerItem(url: URL(string:strSong!)! 
    let playerItems = [playerItem] 
    player = AVQueuePlayer(items : playerItems as! [AVPlayerItem]) 
    player.play() 

Im Folgenden sind die Lösungen, die ich bereits

versucht haben
  1. cmtime Hinzufügen
  2. machen es wieder Pause und spielen
  3. Es funktioniert völlig in Ordnung, wenn die Datei lokal ist.

Jede Hilfe wird sehr geschätzt.

Vielen Dank!

+0

http://stackoverflow.com/a/40079765/6656894 beziehen sich diese Antwort –

+0

funktioniert nicht es ist AVPlayer ich brauche es für AVQueuePlayer und das auch in SWIFT – Aks

+0

, wenn Sie Haben Sie eine einzelne URL zum Abspielen von Audio, dann empfehle ich Ihnen, AVPlayer zu verwenden und in mehreren URLs verwenden Sie dann A VQueuePlayer –

Antwort

0

Sie können den folgenden Code versuchen, es funktioniert für mich. Hier ist die Version ohne Alamofire (ersetzen yourURL mit dem eigentlichen Link):

override func viewDidLoad() { 
    super.viewDidLoad() 
    downloadFileFromURL(url: URL(string: yourURL)!) 
} 

func play(url: URL) { 
    do { 
     let songData = try Data(contentsOf: url, options: NSData.ReadingOptions.mappedIfSafe) 
     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
     try AVAudioSession.sharedInstance().setActive(true) 
     player = try AVAudioPlayer(data: songData, fileTypeHint: AVFileTypeAppleM4A) 
     player!.prepareToPlay() 
     player!.play() 
    } catch { 
     print(error) 
    } 
} 


func downloadFileFromURL(url: URL) { 
    var downloadTask = URLSessionDownloadTask() 
    downloadTask = URLSession.shared.downloadTask(with: url, completionHandler: { 
     customURL, response, error in 

     self.play(url: customURL!) 
    }) 
    downloadTask.resume() 
} 

Mit Alamofire schneller ist, ist es im Grunde lädt die Datei in den Ordner Dokumente und spielt sie hier (nicht vergessen Alamofire zu installieren und Typ außerhalb der Klasse import Alamofire:..

func play(url: URL) { 
    do { 
     let songData = try Data(contentsOf: url, options: NSData.ReadingOptions.mappedIfSafe) 
     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
     try AVAudioSession.sharedInstance().setActive(true) 
     player = try AVAudioPlayer(data: songData, fileTypeHint: AVFileTypeAppleM4A) 
     player!.prepareToPlay() 
     player!.play() 
    } catch { 
     print(error) 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let destination: DownloadRequest.DownloadFileDestination = { _, _ in 
     var documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] 
     documentsURL.appendPathComponent("song."+"mp3") 
     return (documentsURL, [.removePreviousFile]) 
    } 

    Alamofire.download(yourURL, to: destination).response { response in 
     if response.destinationURL != nil { 
      songURL = response.destinationURL! 
      self.play(url: songURL!) 
     } 
    } 
} 
Verwandte Themen