iOS的多媒體支持很是強大,它提供了多套支持多媒體的API,不管是音頻、視頻的播放,仍是錄製,iOS都提供了多種API支持。藉助於這些API的支持,iOS應用既能夠查看、播放手機相冊中的照片、視頻,也能夠播放來自網絡的視頻.iOS也提供了對攝像頭、麥克風的支持。html
AVAudioPlayer比較簡單,當控制AVAudioPlayer對象裝載音頻完成後,就能夠調用AVAudioPlayer的以下方法進行播放控制了。網絡
如:play/pause/stop/prepareToPlay.框架
其中:若是調用play方法時,若是音頻尚未準備好,程序會隱式先執行prepareToPlay方法。ide
除此以外,AVAudioPlayer還提供了以下屬性來訪問音頻文件的相關信息。oop
playing:該屬性(只讀)返回播放器是否正在播放。編碼
pan:該屬性用於設置或返回立體聲平衡。若是該屬性設爲-1.0,則徹底在左邊播放;若是設爲0.0則左右音量相同;若是設爲1.0,則徹底右邊播放。url
enableRate:是否容許改邊播放速率。spa
numberOfLoops:設置循環次數。若是爲-1標識無限循環。code
numberOfChannels:返回音頻的聲道數目。orm
duration:音頻的持續時間
currentTime:獲取音頻的播放點。
url:返回播放器關聯的音頻URL。
import UIKit import AVKit class NADiscoverViewController : UIViewController { lazy var audioPlayer = AVAudioPlayer.init() var durationTime:Float = 0.0 //播放時長 var timer : Timer? lazy var startBtn : UIButton = { let startBtn = UIButton() startBtn.setImage(UIImage.init(named: "bofang"), for: .normal) startBtn.addTarget(self, action: #selector(playAction(sender:)), for: .touchUpInside) return startBtn }() lazy var finishBtn : UIButton = { let finishBtn = UIButton() finishBtn.setImage(UIImage.init(named: "jieshu"), for: .normal) finishBtn.addTarget(self , action: #selector(endAction(sender:)), for:.touchUpInside) return finishBtn }() lazy var progress : UIProgressView = { let progress = UIProgressView() return progress }() lazy var messageLabel : UILabel = { let messageLabel = UILabel() messageLabel.text = "時長" messageLabel.numberOfLines = 0 return messageLabel }() override func viewDidLoad() { super.viewDidLoad() self.navigationItem.title = "發現" setSubViewConstraints() let fileURL : URL = Bundle.main.url(forResource: "a", withExtension: "mp3")! do { let player : AVAudioPlayer = try AVAudioPlayer.init(contentsOf: fileURL) audioPlayer = player }catch{} let str = String.init(format: "音頻文件的聲道數:%d\n音頻文件的持續時間:%g", audioPlayer.numberOfChannels,audioPlayer.duration) messageLabel.text = str durationTime = Float(audioPlayer.duration) //將循環次數設爲-1,用於指定該音頻文件循環播放 audioPlayer.numberOfLoops = -1 audioPlayer.delegate = self } @objc func playAction(sender:UIButton) -> Void { if audioPlayer.isPlaying { audioPlayer.pause() startBtn.setImage(UIImage.init(named: "bofang"), for: .normal) } else { audioPlayer.play() startBtn.setImage(UIImage.init(named: "zanting"), for: .normal) } if timer == nil { timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateProge), userInfo: nil, repeats: true) } } @objc func endAction(sender:UIButton) -> Void { audioPlayer.stop() timer?.isValid timer = nil } @objc func updateProge() { progress.progress = Float(audioPlayer.currentTime) / durationTime } func setSubViewConstraints() -> Void { view.addSubview(startBtn) startBtn.snp.makeConstraints { (make) in make.top.equalTo(100) make.left.equalTo(50) make.width.height.equalTo(50) } view.addSubview(finishBtn) finishBtn.snp.makeConstraints { (make) in make.top.equalTo(startBtn) make.right.equalTo(-50) make.width.height.equalTo(50) } view.addSubview(progress) progress.snp.makeConstraints { (make) in make.top.equalTo(startBtn.snp_bottom).offset(30) make.left.equalTo(50) make.right.equalTo(-50) } view.addSubview(messageLabel) messageLabel.snp.makeConstraints { (make) in make.top.equalTo(progress.snp_bottom).offset(30) make.left.equalTo(50) make.right.equalTo(-50) } } } extension NADiscoverViewController : AVAudioPlayerDelegate { //當audioplayer播放完成後將會自動播放 func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { if player == audioPlayer && flag { print("播放完成") } } func audioPlayerBeginInterruption(_ player: AVAudioPlayer) { if player == audioPlayer { print("被中斷了") } } }
二、使用AVPlayerViewController播放視頻
支持的視頻編碼格式頗有限:H.26四、MPEG-4,擴展名(壓縮格式):.mp四、.mov、.m4v、.m2v、.3gp、.3g2等,若是是RMVB就不行了,須要藉助第三方的框架來實現更多格式的支持。
使用AVPlayerViewController以前先導入AVKit頭文件
AVPlayerViewController中集成了AVPlayer,AVPlayer提供了一些方法能夠輕易實現對視頻播放的控制
如:play/pause/status
AVPlayerViewController經常使用屬性:
showsPlaybackControls:是否顯示回放控制
entersFullScreenWhenPlaybackBegins:開啓這個播放的時候支持(全屏)橫豎屏
exitsFullScreenWhenPlaybackEnds:開啓這個播放結束的時候,能夠退出全屏
案例代碼:
import UIKit import AVKit class NAPublishViewController : UIViewController { var moviePlayer = AVPlayerViewController.init() override func viewDidLoad() { super.viewDidLoad() let movieUrl : URL = Bundle.main.url(forResource: "movie", withExtension: "mp4")! //使用指定的url建立MPMoviesPlayerController moviePlayer.player = AVPlayer.init(url: movieUrl) //是否顯示回放控制 moviePlayer.showsPlaybackControls = true //開啓這個播放的時候支持(全屏)橫豎屏 if #available(iOS 11.0, *) { moviePlayer.entersFullScreenWhenPlaybackBegins = true } //開啓這個播放結束的是否,能夠退出全屏 if #available(iOS 11.0, *) { moviePlayer.exitsFullScreenWhenPlaybackEnds = true } view.addSubview(moviePlayer.view) //判斷moviePlayer已經準備好視頻第一播放幀 if moviePlayer.isReadyForDisplay { moviePlayer.player?.play() } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
經過上面幾行代碼,就能夠實現本地或網絡視頻的播放。
原文出處:https://www.cnblogs.com/xjf125/p/10919477.html