Swift 第三方 播放器AliyunPlayer(阿里云播放器)(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

前言

公司的两个三个项目用到了阿里云的播放器,今天有空简单的记录一下,使用阿里云播放器的整个过程.我会从简单开始慢慢增加需求来完善使用的过程.

下面我会封装一个播放器管理器,跟UI拆分开,然后慢慢加需求.

正题

1.最简单的播放器


1.最简单的播放器 Swift-AliyunPlayer

在这里插入图片描述

直接拿一个MP3的链接,调用AliyunPlayer的接口进行播放
封装播放器管理对象
在这里插入图片描述
调用
在这里插入图片描述

2.增加播放按键, 可以开始,暂停

2.增加播放按键, 可以开始,暂停

在这里插入图片描述

增加一个暂停的方法和一个开始和暂停的按键可以进行开始和停止播放的动作
新增一个暂停的方法
在这里插入图片描述
UI页面增加多一个播放按键
在这里插入图片描述

3.增加滚动条现实播放进度

3.增加滚动条现实播放进度

在这里插入图片描述

增加一个播放进度条,能够实时的监听播放的进度
1.编写进度条的UI
2.代理实现播放监听播放的进度实时更新UI

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
播放器管理器
在这里插入图片描述
在这里插入图片描述
回到UI控制器
在这里插入图片描述
在这里插入图片描述

4.增加开始结束播放的Label

4.增加开始结束播放的Label

在这里插入图片描述

增加播放歌曲进度的Label和歌曲总时间的Label
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
回到播放管理器
在这里插入图片描述
在这里插入图片描述

5.点击拖拽滚动条改变播放进度


5.点击拖拽滚动条改变播放进度

在这里插入图片描述

实现拖拽滚动条和点击滚动条改变播放进度
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.快进后退10秒

6.快进后退10秒. Swift-AliyunPlayer

在这里插入图片描述

实现前进10秒后腿10秒改变播放进度
UI控制器在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
回到播放管理器
在这里插入图片描述

7.前一首下一首


7.(顺序)前一首下一首

在这里插入图片描述

实现切换歌曲,可以上一首歌曲和下一首歌曲
播放管理器新增的代码
在这里插入图片描述
在这里插入图片描述

回到UI控制器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

8.顺序播放 或者 随机播放

8.顺序播放或者随机播放

在这里插入图片描述

UI界面,增加多一个按键
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
播放管理器
在这里插入图片描述
在这里插入图片描述

9.播放模式

9.播放模式 Swift-AliyunPlayer
在这里插入图片描述
说明:经过上面的一系列开发应该发现,播放音乐和结束播放音乐的时候,播放按键的状态是没有跟随变化的,所以先完善这个步骤先,这时候需要时间SDK提供监听播放状态的代理.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

UI界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点击按键改变枚举的状态
在这里插入图片描述

播放控制器
新建一个用于控制播放模式的枚举
在这里插入图片描述
在这里插入图片描述

每一首歌曲播放完毕之后,能正常自动播放下一曲的逻辑就是下面的图片内容决定
在这里插入图片描述

当我们点击按键的时候,会根据目前的播放模式来决定选择下一首什么样的歌曲
在这里插入图片描述

需求

1.如何设置支持后台播放

步骤1.info.plist直接设置

<key>UIBackgroundModes</key>
<array>
	<string>audio</string>
</array>

在这里插入图片描述
或者也可以向下面的设置也是同样的效果
在这里插入图片描述
我发现这样设置之后好像已经支持后台播放,不过网上很多还需要下面的设置.

 AVAudioSession *session = [AVAudioSession sharedInstance];
 [session setActive:YES error:nil];
 [session setCategory:AVAudioSessionCategoryPlayback error:nil];

不过要是想 后台播放下一曲还需要再添加一行代码

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

2.中断音乐停止播放

2023.03.23 NSWL遇到一个问题,当NSWL正在播放音乐的时候,然后打开抖音播放视频,或者打开汽水音乐app播放音乐,这个时候NSWL的音乐被中断了,我们应该App收到通知去暂停播放音乐.
但是NSWL音乐是中断了,但是AliyunPlayer的SDK并没有提供(抢占音乐)代理,所以无法进行设置暂停播放的操作.

但是NML使用 DOUAudioStreamer SDK播放音乐当抢占音乐的时候代理是有回调的,所以设置很方便

那么AliyunPlayer既然没有这个功能,我们应该如何处理这个bug,看下面的逻辑图就明白了
在这里插入图片描述

下面的主要的代码

在这里插入图片描述

// 检测中断音乐通知
NotificationCenter.default.addObserver(self, selector: #selector(interruptionNotification(notifi:)), name: AVAudioSession.interruptionNotification, object: nil)

在这里插入图片描述

    // 检测中断音乐通知
@objc func interruptionNotification(notifi:Notification) {
    //false 中断结束    true 中断开始
    print("Key: \(notifi.userInfo?["AVAudioSessionInterruptionTypeKey"] as? Bool)")
    
    let suspend = notifi.userInfo?["AVAudioSessionInterruptionTypeKey"] as? Bool ?? false
    if suspend {
        NotificationCenter.default.post(name: NSNotification.Name.suspendNotification, object: nil)
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38716347/article/details/129166401