iOS音频与视频的开发(一)-使用AVAudioPlayer播放音乐、使用AVPlayerViewController播放视频

  iOS的多媒体支持很是强大,它提供了多套支持多媒体的API,不管是音频、视频的播放,仍是录制,iOS都提供了多种API支持。借助于这些API的支持,iOS应用既能够查看、播放手机相册中的照片、视频,也能够播放来自网络的视频.iOS也提供了对摄像头、麦克风的支持。html

一、使用AVAudioPlayer播放音乐

  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.
 } }
AVPlayerViewController播放视频

  经过上面几行代码,就能够实现本地或网络视频的播放。

        

 

原文出处:https://www.cnblogs.com/xjf125/p/10919477.html

相关文章
相关标签/搜索