API呼び出しの応答としてmp3 URLを取得しています。そのオーディオを再生したいのですが、どうすればいいですか? (iosスイフト)
ここに私の応答があります
{
content = "En este primer programa se tratar\U00e1n asuntos tan importante como este y aquel sin descuidar un poco de todo lo dem\U00e1s";
file = "http://radio.spainmedia.es/wp-content/uploads/2015/12/ogilvy.mp3";
image = "http://radio.spainmedia.es/wp-content/uploads/2015/12/tapas.jpg";
number = 0001;
subtitle = Titulareando;
title = "Tapa 1";
}
ここに私のコードがあります::
@IBAction func btnplayaudio(sender: AnyObject) {
let urlstring = "http://radio.spainmedia.es/wp-content/uploads/2015/12/tailtoddle_lo4.mp3"
let url = NSURL(string: urlstring)
print("the url = \(url!)")
play(url!)
}
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")
}
}
どこがおかしいの?
私は次を試しました、
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!)
以下のメソッドを追加し、
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()
}
そして、あなたのプレイ方法はそのままで、
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")
}
}
Mp3ファイルをダウンロードしてから再生してみてください。どういうわけかAVAudioPlayerはmp3ファイルをダウンロードしません。オーディオファイルをダウンロードでき、プレーヤーで再生できます。
httpソースから読み込んでおり、iOS 9 +に設定するには以下が必要なので、忘れずにinfo.plistに追加してください。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</plist>
リモートコンテンツを再生するには、AVAudioPlayerの代わりに AVPlayer を使用します。ドキュメントによると、AVAudioPlayerはオーディオを再生するためにmp3ファイルを必要とします。 AVAudioPlayerは、 ストリーミング のサポートを提供しません。
このコードを試してください、それは私のためにうまく機能します
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")
}
}
Info.plistファイルでApp Transport Security(ATS)を設定することに注意してください。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
AVPlayer
は非常に限られているため(たとえば、url
全体を再生成することなくAVPlayer
を変更することはできません)、AVQueuePlayer
を使用する必要があります。
docs から:
AVQueuePlayerは、多数のアイテムを順番に再生するために使用されるAVPlayerのサブクラスです。このクラスを使用すると、ローカルまたはプログレッシブにダウンロードされたファイルベースのメディア(QuickTimeムービーやMP3オーディオファイルなど)、およびHTTPライブストリーミングを使用して提供されるメディアで構成されるプレーヤーアイテムのキューを作成および管理できます。
Swift 3では次のように動作します:
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()
}
}
スイフト4
1-import AVFoundation
2-プレイヤーを宣言する
var player : AVPlayer?
3-ViewDidLoad呼び出し関数で、文字列のようなストリーミングURLを渡す
loadRadio(radioURL: (radioStation?.streamURL)!)
4-再生する機能
func loadRadio(radioURL: String) {
guard let url = URL.init(string: radioURL) else { return }
let playerItem = AVPlayerItem.init(url: url)
player = AVPlayer.init(playerItem: playerItem)
player?.play()
startNowPlayingAnimation(true)
played = true
}
私にとっては、Swiftでオーディオをストリーミングするための最良かつ簡単な方法です。
いくつかの調査と、いずれの答えも私の問題を解決できなかったために失望した後、私は解決策に至りました。最終結果です。受け入れられた答えは半分正しいです、あなたはまだAVPlayerLayer
を作成する必要があります
let url = URL(string: "https://www.myinstants.com/media/sounds/cade-o-respeito.mp3" ?? "")
playerItem = AVPlayerItem(url: url!)
player = AVPlayer(playerItem: playerItem)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = CGRect(x: 0, y: 0, width: 10, height: 10)
self.contentView.layoutSublayers(of: playerLayer)
player?.play()
Swift 4
func playSound(soundUrl: String) {
let sound = URL(fileURLWithPath: soundUrl)
do {
let audioPlayer = try AVAudioPlayer(contentsOf: sound)
audioPlayer.prepareToPlay()
audioPlayer.play()
}catch let error {
print("Error: \(error.localizedDescription)")
}
}