14.Swift 播放音频
来源:互联网 发布:劫持域名如何处理 编辑:程序博客网 时间:2024/06/05 16:34
14.Swift 播放音频
- Swift 播放音频
- AVPlayer
- AVAudioPlayer
- MPMoviePlayerViewController
- AVPlayerViewController
Swift中的播放音频功能实现,可以使用AVPlayer
和AVAudioPlayer
;也有两个封装好的Controller可以播放音频,分别是MPMoviePlayerViewController
和者AVPlayerViewController
。
两者的区别只有一点,MPMoviePlayerViewController
在IOS9.0后被弃用了。若你调用该API的话,你会看到如下警告:
‘MPMoviePlayerViewController’ was deprecated in iOS 9.0: Use AVPlayerViewController in AVKit.
上述的警告,告诉我们:在IOS9.0以后,MPMoviePlayerViewController就被废弃了,推荐我们使用AVKit中的AVPlayerViewController。当然目前不是完全废弃,还是能调用MPMoviePlayerViewController。
AVPlayer
AVPlayer构造方法 AVPlayer.init(URL: NSURL)
播放 AVPlayer.play()
暂停 AVPlayer.pause()
注意:AVPlayer是没有停止方法的播放器,可以通过逻辑处理;先将AVPlayer暂停,然后设置为nil即可。但是这样的话,每次播放前都必须进行是否为nil的判断
var avPlayer:AVPlayer! // 实例化AVPlayer func initAVPlayer(){ self.avPlayer = AVPlayer(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("aLIEz", ofType: "mp3")!)) } // 开始 @IBAction func avPlayerStart(sender: AnyObject) { // 判断AVPlayer是否为空 if let player = self.avPlayer{ player.play() }else{ // 为空则重新实例化 self.initAVPlayer() self.avPlayer.play() } } // 暂停 @IBAction func avPlayerPause(sender: AnyObject) { self.avPlayer.pause() } // 停止 @IBAction func avPlayerStop(sender: AnyObject) { // AVPlayer没有stop的方法,所以只能先暂停,再清空 self.avPlayer.pause() self.avPlayer = nil }
AVAudioPlayer
AVAudioPlayer构造方法 AVAudioPlayer.init(contentsOfURL url: NSURL) throws
播放 AVAudioPlayer.play() -> Bool
暂停 AVAudioPlayer.pause()
停止。实际上,真的并没有用 AVAudioPlayer.stop()
AVAudioPlayer播放音频的当前时间,用于和stop()一起调用,实现真正的停止 AVAudioPlayer.currentTime: NSTimeInterval
var avAudioPlayer:AVAudioPlayer! // 实例化avAudioPlayer func initAVAudioPlayer(){ do{ try self.avAudioPlayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("aLIEz", ofType: "mp3")!)) }catch let error as NSError{ print(error.localizedDescription) } } // 播放 @IBAction func avAudioPlayerStart(sender: AnyObject) { self.avAudioPlayer.play() } // 暂停 @IBAction func avAudioPlayerPause(sender: AnyObject) { self.avAudioPlayer.pause() } // 停止 @IBAction func avAudioPlayerStop(sender: AnyObject) { self.avAudioPlayer.stop() // 如果当前时间不设置为0,那么停止将毫无意义 self.avAudioPlayer.currentTime = 0 }
MPMoviePlayerViewController
官方不推荐使用了,因为IOS9.0以后将要废弃
// MPMoviePlayerViewController播放音频 func playMPMoviePlayerViewController(){ // 实例化MPMoviePlayerViewController let mpMPVC:MPMoviePlayerViewController = MPMoviePlayerViewController(contentURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("aLIEz", ofType: "mp3")!)) // Controller的跳转 self.presentViewController(mpMPVC, animated: true) { () -> Void in // 调用MPMoviePlayerViewController里的moviePlayer播放音频 mpMPVC.moviePlayer.play() } }
AVPlayerViewController
这个的话,实质上是内部嵌套了一个AVPlayer的官方Controller。
官方不推荐使用MPMoviePlayerViewController,并且IOS9.0以后将要废弃,是因为要主推AVPlayerViewController
AVPlayerViewController的设计还是非常合理的,将分离了播放器出来,大大降低了播放代码的耦合度。
怎么降低了耦合度?
MPMoviePlayerController.moviePlayer: MPMoviePlayerController! { get }
AVPlayerViewController.player: AVPlayer?
对比两个提供给我们调用play的对象,一个是Controller,一个是AVPlayer。也就是说MPMoviePlayerController调用的是自身去播放,而AVPlayerViewController调用的是自己内部的AVPlayer去播放。假如要在播放流程上设计各种花式的需求,MPMoviePlayerController去实现的话,就要写一个自定义的MPMoviePlayerController子类去覆写其的播放逻辑方法;而AVPlayerViewController的话,只需要自定义一个AVPlayer子类,然后给AVPlayerViewController中的player属性添加一个引用而已,这样的解耦,完全脱离了Controller,无论播放逻辑再复杂,也不影响到AVPlayerViewController
// AVPlayerViewController播放音频 func playAVPlayerViewController(){ // 实例化AVPlayerViewController let AVVC:AVPlayerViewController = AVPlayerViewController() // 实例化AVPlayer let avPlayer:AVPlayer = AVPlayer(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("aLIEz", ofType: "mp3")!)) // 添加AVPlayerViewController里的AVPlayer AVVC.player = avPlayer // Controller的跳转 self.presentViewController(AVVC, animated: true) { () -> Void in // 调用AVPlayerViewController里的AVPlayer播放音频 AVVC.player?.play() } }
- 14.Swift 播放音频
- Swift中播放短音频
- 音频播放
- 音频播放
- 音频播放
- 音频播放
- 播放音频
- 音频播放
- 音频播放
- 播放音频
- 音频播放
- 音频播放
- 音频播放
- 音频播放
- 播放音频
- 【音频播放】
- 音频播放
- 音频播放
- VB6学习技巧
- 带你玩转Visual Studio——带你理解微软的预编译头技术
- 利用OpenXml SDK创建Excel文件和给指定的worksheet填充数据
- 华南理工大学2013级计科一班操作系统实验
- css display的用法及原理
- 14.Swift 播放音频
- 【总结】软件测试管理简记
- HDU 1719 找规律
- java篇 【15】抽象类与接口的应用 《==重要
- cf#307-C - GukiZ hates Boxes-二分+贪心
- virtual
- dijkstra
- c语言学习笔记(11)宏定义使用与分析
- mysql闪退解决