2014-09-18 3 views
13

Non sono un programmatore IOS ma ho bisogno di una semplice app per riprodurre un flusso audio da un server wowza. Ecco il mio codice, non ho errori ma anche audio. Qualsiasi guida o aiuto?IOS 8 Swift AVAudioPlayer riproduce audio remoto (server wowza)

import UIKit 
    import AVFoundation 

    class ViewController: UIViewController { 

     var player = AVAudioPlayer() 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      var fileURL: NSURL = NSURL(string: "http://url----.com/playlist.m3u8") 

      var error:NSError? 
      player = AVAudioPlayer(contentsOfURL: fileURL, error: &error) 

      if player.prepareToPlay() && player.play(){ 
       println("yes") 
      } else { 
       println("no") 
      } 
     } 
+0

Non hai verificare se 'error' contiene errori o meno. – Raptor

+0

come posso verificarlo? –

+0

@Raptor AVAudioPlayer non supporta lo streaming. Per lo streaming live utilizzare AVPlayer – Ramesh

risposta

0

Per verificare la presenza di errori in Swift, uso:

if let errorDetails = error { 
    println("Error creating player: \(errorDetails.localizedDescription)") 
} else { 
    if player.prepareToPlay() && player.play(){ 
     println("yes") 
    } else { 
     println("no") 
    } 
} 
+0

Errore durante la creazione del lettore: impossibile completare l'operazione. (Errore OSStatus 2003334207.). –

+2

l'errore '2003334207' significa che 'AVAudioPlayer' richiede un file locale. Scaricalo da Internet e salvalo in locale prima di riprodurlo. Suggerimento: usa 'writeToFile' – Raptor

0

uso AVPlayer:

var player:AVPlayer! 
var steamingURL:NSURL = NSURL(string:playerURL) 
player = AVPlayer(URL: steamingURL) 
player.play() 
+1

senza fortuna ... ancora nessun audio ... –

+0

@DavidTurton Ma questo codice funziona bene nel mio progetto attuale. Quindi provalo ancora – Ramesh

+0

Puoi mostrarmi dove stai iniziando la variabile playerURL, forse sto facendo qualcosa di sbagliato? –

2

Questo anwser mi ha aiutato: AVAudioPlayer with external URL to *.m4p

ho dovuto convertire thr URL NSData:

let url = "http://megdadhashem.wapego.ru/files/56727/tubidy_mp3_e2afc5.mp3" 
let fileURL = NSURL(string:url) 
let soundData = NSData.dataWithContentsOfURL(fileURL, options: nil, error: nil) 
var error: NSError? 
self.player = AVAudioPlayer(data: soundData, error: &error) 
if player == nil { 
    if let e = error { 
    println(e.localizedDescription) 
    } 
} 
player.prepareToPlay() 
player.volume = 1.0 
player.delegate = self 
player.play() 
+2

Tieni presente che questa opzione comporta il download di mp3 e la riproduzione. Con AVPlayer puoi effettivamente trasmetterlo in streaming. –

18

Questo ha funzionato per me:

var player = AVPlayer() 

func configureView() { 

    let url = "http://stream.your.url.com" 
    let playerItem = AVPlayerItem(URL:NSURL(string:url)) 
    player = AVPlayer(playerItem:playerItem) 
    player.rate = 1.0; 
    player.play() 

} 
+4

funziona anche se si crea 'AVPlayer' direttamente con url come questo: 'avPlayer = AVPlayer (URL: nsUrl)' L'unica cosa che dovresti fare è creare avPlayer come variabile di istanza se crei avPlayer come variabile locale che non funziona per me . – Aks

+1

Aveva lo stesso problema e lo ha risolto come hai detto tu. – MXV

+0

Bello! Dopo aver creato AVPlayer come variabile di istanza, ha iniziato a giocare! – Alex

1

prega di tenere presente dal iOS 9: App Transport Security (ATS) configurato?

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>yourserver.com</key> 
     <dict> 
     <!--Include to allow subdomains--> 
     <key>NSIncludesSubdomains</key> 
     <true/> 
     <!--Include to allow HTTP requests--> 
     <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
     <true/> 
     <!--Include to specify minimum TLS version--> 
     <key>NSTemporaryExceptionMinimumTLSVersion</key> 
     <string>TLSv1.1</string> 
     </dict> 
    </dict> 
</dict> 

Swift 2:

let url = "http://yourserver.com/source.mp3" 
    let playerItem = AVPlayerItem(URL:NSURL(string:url)!) 
    audio = AVPlayer(playerItem:playerItem) 
    audio.rate = 1.0; 
    audio.play() 
9

In Swift 2.0 e iOS 9

do { 
    let url = "http://yourdomain.com/file.mp3" 
    let fileURL = NSURL(string:url) 
    let soundData = NSData(contentsOfURL:fileURL!) 
    self.audioPlayer = try AVAudioPlayer(data: soundData!) 
    audioPlayer.prepareToPlay() 
    audioPlayer.volume = 1.0 
    audioPlayer.delegate = self 
    audioPlayer.play() 
} catch { 
    print("Error getting the audio file") 
}