2014-09-18 4 views
13

Я не программист IOS, но мне нужно простое приложение для воспроизведения аудиопотока с сервера wowza. Вот мой код, я не получаю никаких ошибок, но не имею никакого звука. Любые рекомендации или помощь?IOS 8 Swift AVAudioPlayer воспроизводит удаленный звук (wowza server)

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

Вы не проверить, содержит ли 'error' ошибка или нет. – Raptor

+0

как я могу проверить его? –

+0

@Raptor AVAudioPlayer не поддерживает потоковую передачу. Для потоковой передачи в реальном времени используйте AVPlayer – Ramesh

ответ

0

Чтобы проверить наличие ошибок в Swift, используйте:

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

Ошибка при создании проигрывателя: операция не может быть выполнена. (Ошибка OSStatus 2003334207.). –

+2

Ошибка '2003334207' означает, что для AVAudioPlayer требуется локальный файл. Загрузите его из Интернета и сохраните его на локальном компьютере перед его воспроизведением. Подсказка: используйте 'writeToFile' – Raptor

0

использование AVPlayer:

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

не повезло ... до сих пор нет звука ... –

+0

@DavidTurton Но этот код хорошо работает в моем текущем проекте. Так что попробуйте еще раз – Ramesh

+0

Не могли бы вы показать мне, где вы начинаете переменную playerURL, может быть, я что-то делаю неправильно? –

2

Это anwser помогло мне: AVAudioPlayer with external URL to *.m4p

Я должен был преобразовать Чет 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

Имейте в виду, что этот параметр включает загрузку mp3 и воспроизведение. С AVPlayer вы можете реально его перевести. –

18

Это работает для меня:

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

он также работает, если вы создаете «AVPlayer» напрямую с url следующим образом: «avPlayer = AVPlayer (URL: nsUrl)» Единственное, что вам нужно сделать, это создать avPlayer в качестве переменной экземпляра, если вы создаете avPlayer как локальную переменную, которая не работает для меня , – Aks

+1

Имел ту же проблему и решил ее, как вы сказали. – MXV

+0

Ницца! После того, как я создал AVPlayer в качестве переменной экземпляра, он начал играть! – Alex

1

Пожалуйста, имейте в виду, так как прошивкой 9: App Transport Security (ATS) настроен?

<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

В Swift 2,0 и 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") 
}