Saltar al contenido

Cómo reproducir audio mp3 desde URL en ios swift

Luego de indagar en diversos repositorios y foros de internet al final hemos descubierto la solución que te compartiremos aquí.

Solución:

Use AVPlayer en lugar de AVAudioPlayer para reproducir contenido remoto. Según la documentación, AVAudioPlayer necesita un archivo mp3 para reproducir audio. AVAudioPlayer no brinda soporte para transmisión.

Prueba este código, me funciona bien

func play(url:NSURL) 
    print("playing (url)")

    do 

        let playerItem = AVPlayerItem(URL: url)

        self.player = try AVPlayer(playerItem:playerItem)
        player!.volume = 1.0
        player!.play()
     catch let error as NSError 
        self.player = nil
        print(error.localizedDescription)
     catch 
        print("AVAudioPlayer init failed")
    

Tenga en cuenta que debe configurar App Transport Security (ATS) en el archivo info.plist.

NSAppTransportSecurity
    
        NSAllowsArbitraryLoads
        
    

Intenté lo siguiente,

let urlstring = "http://radio.spainmedia.es/wp-content/uploads/2015/12/tailtoddle_lo4.mp3"
let url = NSURL(string: urlstring)
print("the url = (url!)")
downloadFileFromURL(url!)

Agregue los siguientes métodos,

func downloadFileFromURL(url:NSURL)

    var downloadTask:NSURLSessionDownloadTask
    downloadTask = NSURLSession.sharedSession().downloadTaskWithURL(url, completionHandler:  [weak self](URL, response, error) -> Void in
        self?.play(URL)
    )
        
    downloadTask.resume()
    

Y tu método de juego tal como es,

func play(url:NSURL) 
    print("playing (url)")
    
    do 
        self.player = try AVAudioPlayer(contentsOfURL: url)
        player.prepareToPlay()
        player.volume = 1.0
        player.play()
     catch let error as NSError 
        //self.player = nil
        print(error.localizedDescription)
     catch 
        print("AVAudioPlayer init failed")
    
    

Descargue el archivo mp3 y luego intente reproducirlo, de alguna manera AVAudioPlayer no descarga su archivo mp3 por usted. Puedo descargar el archivo de audio y el reproductor lo reproduce.

Recuerde agregar esto en su info.plist ya que está cargando desde un http fuente y necesita configurar lo siguiente para iOS 9+





    NSAllowsArbitraryLoads
    


Ya que AVPlayer es muy limitado (por ejemplo, no puede cambiar url ahí sin regenerar entera AVPlayer Creo que deberías usar AVQueuePlayer:

De los documentos:

AVQueuePlayer es una subclase de AVPlayer que se utiliza para reproducir una serie de elementos en secuencia. Con esta clase, puede crear y administrar una cola de elementos del reproductor compuesta por medios basados ​​en archivos locales o descargados progresivamente, como películas QuickTime o archivos de audio MP3, así como medios servidos mediante HTTP Live Streaming.

así que en rápido 3 funcionará así:

lazy var playerQueue : AVQueuePlayer = 
    return AVQueuePlayer()
()

func playTrackOrPlaylist
    if let url = track.streamURL()  //this is an URL fetch from somewhere. In this if you make sure that URL is valid
        let playerItem = AVPlayerItem.init(url: url)
        self.playerQueue.insert(playerItem, after: nil)
        self.playerQueue.play()
    

Comentarios y valoraciones

Al final de la página puedes encontrar las aclaraciones de otros usuarios, tú incluso tienes la habilidad dejar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *