bear-zyy

📖 earlier posts 📖

ios开发之音频、视频、拍照、视频录制

音频

首先了解一下音频播放的实现级别:
离线播放:这里并不是指应用不联网,而是指播放本地音频文件,包括先下完完成音频文件再进行播放的情况,这种使用AVFoundation里的AVAudioPlayer可以满足
在线播放:使用AVFoundation的AVPlayer可以满足
在线播放同时存储文件:使用AudioFileStreamer + AudioQueue 可以满足
在线播放且带有音效处理:使用
这里主要是讲1和2,有兴趣的可以自行去研究3跟4


1、离线播放
播放音频通常会选择使用AVFoundation.framework中的AVAudioPlayer。

AVAudioPlayer可以看成一个播放器,它支持多种音频格式,而且能够进行进度、音量、播放速度等控制。

下面是音频播放代码

1
2
3
4
5
6
7
8
9
10
let urlString = Bundle.main.path(forResource: "videoRing2", ofType: "mp3")//都是播放本地音频文件
let url = NSURL.fileURL(withPath: urlString!)
do{
player = try AVAudioPlayer.init(contentsOf: url)
guard player != nil else { return }
player?.prepareToPlay();
player?.play()
} catch let error{
print(error.localizedDescription)
}

有很多的属性可以使用

1
2
3
4
5
6
7
8
9
10
public init(contentsOf url: URL) throws//初始化本地URL文件
public init(data: Data) throws //初始化data数据
open func prepareToPlay() -> Bool //准备播放,在播放之前必须调用
open func play() -> Bool //播放
open func play(atTime time: TimeInterval) -> Bool //从哪个时间点开始播放,用来快进和倒退
open func pause() //暂停
open func stop() //停止
open var duration: TimeInterval { get }//获取音频文件播放时长

2、在线播放
使用AVPlayer要用到AVPlayer、AVPlayerItem这两个类。

1
2
3
4
5
6
let onlineUrl = NSURL.init(string:"http://xxxxxxxxxxx.mp3")
item = AVPlayerItem.init(url: onlineUrl! as URL)
onLinePlayer = AVPlayer.init(playerItem: item)
//初始化后,就可以播放了。
onLinePlayer?.play()//播放
onLinePlayer?.pause()//暂停

视频

可以播放本地视频文件也可以播放在线视频文件


MPMoviePlayerController 这个类在iOS 9之后已经过去了,这里就不在提及了。

现在一般使用AVPlayerViewController和AVPlayer搭配使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var playerView : AVPlayerViewController?
var player : AVPlayer?
var item : AVPlayerItem?
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
let string = "http:xxxxxxxxxxxxxxx.mp4"
playerView = AVPlayerViewController.init()
item = AVPlayerItem.init(url: NSURL.init(string: string)! as URL)
player = AVPlayer.init(playerItem: item)
let layer = AVPlayerLayer.init(player: player)
self.view.layer .addSublayer(layer)
self.playerView?.player = player
let onLinePause = UIButton.init(type: .custom)
onLinePause.setTitle("播放视频", for: .normal)
onLinePause.setTitleColor(UIColor.red, for: .normal)
onLinePause.frame = CGRect.init(x: 200, y: 500, width: 150, height: 40)
onLinePause.addTarget(self, action: #selector(movieClick), for: .touchUpInside)
self.view.addSubview(onLinePause)
// Do any additional setup after loading the view.
}
func movieClick() {
self.show(self.playerView!, sender: nil)
}

拍照

等待中。。。。

视频录制

等待中。。。。

📕 end of posts 📕