2015-02-09 73 views
4

剛開始使用AVKit,我試圖播放一些音頻。使用Mastering Modern Media Playback中詳細介紹的新AVPlayerViewController會很好,所以我有一個現成的播放/暫停/搜索UI。我基本上有一個容器視圖的故事板,它具有一個嵌入到AVPlayerViewController的segue。然後我用:AVPlayerViewController只使用AVPlayer音頻AVPlayer

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "embedAudio") { 
     var playerViewController:AVPlayerViewController = segue.destinationViewController as AVPlayerViewController 

     playerViewController.player = AVPlayer(URL: NSURL(string: "http://dts.podtrac.com/redirect.mp3/files.serialpodcast.org/sites/default/files/podcast/1420057326/serial-s01-e01.mp3")) 
    } 
} 

它很好地嵌入和劇本,但它有一個大黑QuickTime的符號,其中的視頻會。我想知道是否有辦法讓它看起來更像音樂或播客應用程序。

回答

3

不要使用AVPlayerViewController,因爲它是一個全屏黑盒視頻播放器。

相反,您可以使用工具欄和操作系統中隨時可用的控件(播放,暫停,停止等)創建您自己的視圖控制器,並將它們掛接到您的AVAudioPlayer。這是你自己的視圖控制器的代碼可能是什麼樣子:

維護播放器的實例

var audioPlayer:AVAudioPlayer! 
@IBOutlet weak var playProgress: UIProgressView! 

例如:播放

@IBAction func doPlayAction(_ sender: AnyObject) { 
    do { 
     try audioPlayer = AVAudioPlayer(contentsOf: audioRecorder.url) 
     audioPlayer.play() 
    } catch {} 
} 

例:停止

@IBAction func doStopAction(_ sender: AnyObject) { 
    if let audioPlayer = self.audioPlayer { 
     audioPlayer.stop() 
    } 
} 

例子:跟蹤進度

func playerProgress() { 
    var progress = Float(0) 
    if let audioPlayer = audioPlayer { 
     progress = ((audioPlayer.duration > 0) 
      ? Float(audioPlayer.currentTime/audioPlayer.duration) 
      : 0) 
    } 
    playProgress.setProgress(progress, animated: true) 
} 

我已經使用這個答案概述的方法貼記錄播放例子。

Preview

►查找GitHub這個解決方案對Swift Recipes其他詳細信息。

+1

或者,如果你不想通過網站挖掘發現項目,只是[下載直接](http://swiftarchitect.com/wp-content/uploads/2015/08/SO-32342486.zip)。 – 2016-07-15 20:33:22

3

爲什麼要重新發明輪子?只需使用AVPlayerViewControllercontentOverlayView屬性。在這裏,您可以設置專輯封面圖片,或在QuickTime徽標(視頻所在的位置)和控件之間放置任何UIView

請注意,您必須在AVPlayerViewController之後做到這一點已經被提出,作爲其contentOverlayView屬性將是零在prepareForSegue