斯威夫特3:从服务器

斯威夫特3:从服务器

问题描述:

流MP3文件我想流从一个url了一个MP3。这是一个非常小的样本文件。但是,当我按下播放按钮时,什么也没有发生。那么,没有声音播放。斯威夫特3:从服务器

我是相当新的雨燕非常一个小白所以这里是完整的视图控制器,因为我不确定你可能需要的东西。

import UIKit 
    import AVKit 
    import AVFoundation 
    import Foundation 

    class ViewController: UIViewController { 

     @IBAction func playButton(_ sender: Any) { 

      print("pressed") 
      let urlstring = "http://cdn.mos.musicradar.com/audio/samples/80s-heat-demos/AM_Eighties08_85-01.mp3" 
      let url = NSURL(string: urlstring) 
      print("the url = \(url!)") 
      downloadFileFromURL(url: url!) 

     } 



     override func viewDidLoad() { 
      // Do any additional setup after loading the view 
     } 



     func downloadFileFromURL(url:NSURL){ 
      weak var weakSelf = self 
      var downloadTask:URLSessionDownloadTask 
      downloadTask = URLSession.shared.downloadTask(with: url as URL, completionHandler: { (URL, response, error) -> Void in 
      print("URL = \(URL)") 
      weakSelf!.plays(url: URL! as URL) 

      }) 

      downloadTask.resume() 

     } 



     func plays(url:URL) { 

      print("playing \(url)") 

      do { 

       var playerItem = AVPlayerItem(url: url as URL) 

       player = AVPlayer(url : url) 

       player.volume = 1.0 

       player.play() 

      } catch let error as NSError { 



       print(error.localizedDescription) 

      } catch { 

       print("AVAudioPlayer init failed") 

      } 

     } 

    } 
在我的控制台

我得到这个:

按下

的URL = http://cdn.mos.musicradar.com/audio/samples/80s-heat-demos/AM_Eighties08_85-01.mp3

URL =可选(文件:///私人的/ var /移动/集装箱/Data/Application/C255E8F4-DDBA-43BB-BC33-AF71C08BBDFD/tmp/CFNetworkDownload_tm0O8v.tmp)

播放文件:/ //private/var/mobile/Containers/Data/Application/C255E8F4-DDBA-43BB-BC33-AF71C08BBDFD/tmp/CFNetworkDownload_tm0O8v.tmp

URL =可选(文件:///私人的/ var /移动/集装箱/数据/应用/ C255E8F4-DDBA-43BB-BC33-AF71C08BBDFD的/ tmp/CFNetworkDownload_J1f2LF.tmp)

播放文件:///私人的/ var /移动/集装箱/数据/应用/ C255E8F4-DDBA-43BB-BC33- AF71C08BBDFD的/ tmp/CFNetworkDownload_J1f2LF.tmp

谁能帮助我解决这个问题?我只是希望能够通过点击来自服务器的按钮而不是本地播放此声音。

+0

尝试检查你的iPhone设备的音量 – Ved

+0

@Ved如果你的意思是检查音量?我检查了模拟器和手机。成交量上涨。 – JamesG

+0

是你在静音/震动模式? – Larme

请尝试使用此代码,供各位玩家功能。

func plays(url:URL) { 

     print("playing \(url)") 

     do { 
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
      try AVAudioSession.sharedInstance().setActive(true) 

      player = try AVAudioPlayer(contentsOf: url) 
      guard let player = player else { return } 

      player.play() 
     } catch let error as NSError { 



      print(error.localizedDescription) 

     } catch { 

      print("AVAudioPlayer init failed") 

     } 

    } 
+0

谢谢:)完美地为我工作。你知道,如果有一种方法,看看有多少缓冲,就像一个进度指示器,甚至只是一个印刷()似乎需要一段时间才能开始播放这将是很好显示等待消息。 – JamesG

+0

欢迎:)检查它可以实现多少缓冲URLSessionDelegate func urlSession(_ session:URLSession,downloadTask:URLSessionDownloadTask,didWriteData bytesWritten:Int64,totalBytesWritten:Int64,totalBytesExpectedToWrite:Int64){} – MageNative