Swift - 使用AVPlayer制作一个音乐播放器1(带播放时间和播放进度)

前端之家收集整理的这篇文章主要介绍了Swift - 使用AVPlayer制作一个音乐播放器1(带播放时间和播放进度)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
过去我们可以使用 Media Player框架 MPMoviePlayerController来播放视频、音频。但自 iOS9.0起,这个便被废除。取而代之的便是 AVFoundation框架的 AVPlayer

1,AVPlayer介绍

(1) AVPlayer可以用来播放视频,也可以播放任何 iOS支持的音频。
(2) AVPlayer既可以播放本地音频,可以播放网络音频(在线音频)。
(3)要注意的是,如果播放远程音频, AVPlayer同样是全部加载到本地后才开始播放,而不是以流媒体的形式播放。

2,效果

(1)下面使用 AVPlayer制作一个音乐播放器。
(2)点击按钮可以时音乐在“ 播放”和“ 暂停”两个状态间切换。
(3)播放过程中进度条和旁边的标签会实时显示当前的进度。
(4)进度条滑块可以自由拖动,并播放对应时间点的音乐。

3,样例代码

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import UIKit
AVFoundation
class ViewController : UIViewController {
//播放按钮
@IBOutlet weak var playButton: UIButton !
//可拖动的进度条
playbackSlider: UiSlider !
//当前播放时间标签
playTime: UILabel !
//播放器相关
playerItem: AVPlayerItem ?
player: AVPlayer ?
override func viewDidLoad() {
super .viewDidLoad()
//初始化播放器
let url = URL (string: "http://www.hangge.com/music.mp3" )
playerItem = (url: url!)
player = AVPlayer (playerItem: playerItem!)
//设置进度条相关属性
duration : CMTime = playerItem!.asset.duration
seconds : Float64 = CMTimeGetSeconds (duration)
playbackSlider!.minimumValue = 0
playbackSlider!.maximumValue = Float (seconds)
playbackSlider!.isContinuous = false
//播放过程中动态改变进度条值和时间标签
player!.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds (1,1),
queue: DispatchQueue .main) { ( ) -> Void in
if self .player!.currentItem?.status == .readyToPlay {
//更新进度条进度值
currentTime = ( .player!.currentTime())
.playbackSlider!.value = Float (currentTime)
//一个小算法,来实现00:00这种格式的播放时间
all: Int = (currentTime)
m: =all % 60
f: (all/60)
time: String = ""
if f<10{
time= "0\(f):"
} else {
"\(f)"
}
m<10{
time+= "0\(m)"
{
"\(m)"
}
//更新播放时间
.playTime!.text=time
}
}
}
//播放按钮点击
@IBAction playButtonTapped(_ sender: Any ) {
//根据rate属性判断当天是否在播放
player?.rate == 0 {
player!.play()
playButton.setTitle( "暂停" , for : .normal)
{
player!.pause()
"播放" : .normal)
}
}
//拖动进度条改变值时触发
playbackSliderValueChanged(_ sender: ) {
Int64 Int64 (playbackSlider.value)
targetTime: CMTimeMake (seconds,1)
//播放器定位到对应的位置
player!.seek(to: targetTime)
//如果当前时暂停状态,则自动播放
player!.rate == 0
{
player?.play()
: .normal)
}
}
//页面显示添加歌曲播放结束通知监听
viewWillAppear(_ animated: Bool ) {
NotificationCenter . default .addObserver( name: NSNotification . Name AVPlayerItemDidPlayToEndTime }
//页面消失时取消歌曲播放结束通知监听
viewWillDisappear(_ animated: ) {
.removeObserver( )
}
//歌曲播放完毕
finishedPlaying(myNotification: NSNotification ) {
print ( "播放完毕!" )
stopedPlayerItem: AVPlayerItem = myNotification.object as ! AVPlayerItem
stopedPlayerItem.seek(to: kCMTimeZero)
}
didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
}
}
源码下载hangge_1668.zip

原文出自: www.hangge.com 转载请保留原文链接 http://www.hangge.com/blog/cache/detail_1668.html 原文链接:https://www.f2er.com/swift/321594.html

猜你在找的Swift相关文章