刚开始使用AVKit,我正在尝试播放一些音频.使用
Mastering Modern Media Playback中详细介绍的新AVPlayerViewController会很高兴,这样我就可以使用现成的播放/暂停/搜索UI.我基本上有一个带有容器视图的故事板,它有一个嵌入到AVPlayerViewController的segue.然后我用:
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符号,视频将在其中.我想知道是否有办法让它看起来更像是音乐或播客应用程序.
解决方法
不要使用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) }
我已经使用本答案中概述的方法发布了录制和播放示例.
►在GitHub找到此解决方案,并在Swift Recipes找到其他详细信息.