加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:15:14 所属栏目:百科 来源:网络整理
导读:过去我们可以使用 Media Player 框架 MPMoviePlayerController 来播放视频、音频。但自 iOS9.0 起,这个便被废除。取而代之的便是 AVFoundation 框架的 AVPlayer 。 1,AVPlayer介绍 (1) AVPlayer 可以用来播放视频,也可以播放任何 iOS 支持的音频。 (2
过去我们可以使用 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读